Store_Type CEO_Name *Table Store*
Store1 CEO1
Store2 CEO1
Store3 CEO2
Store4 CEO2
Store5 CEO2
Store6 CEO3
City Store_Type Items *Table City*
NY Store1 8000000
DC Store1 600000
Philly Store1 1500000
Ottawa Store2 800000
Tortonto Store2 2500000
Berlin Store4 3500000
Hamburg Store4 2000000
Bonn Store4 300000
Paris Store5 2000000
Lyon Store5 700000
Bamako Store6 2000000
Timbuktu Store6 50000
Mopti Store6 100000
通过检查表,结果应类似于以下内容:输出是针对每个CEO的,列出了该CEO的商店类型数量及其所在城市中的最大商品数量
CE01 2 8000000
CEO2 2 (3?) 3500000
CE03 1 2000000
我尝试了多种方法来执行此操作,但失败了。我知道我可以使用COUNT(Store_Type)来计算每个CEO拥有多少种商店类型,但是由于存在重复项,因此很难说出这3列表。然后将使用MAX(items),但它必须是整个CEO的最大值。
我尝试将其分解,但不断出现组错误。这是一些我设法写下来的例子,但是当我以为自己有一个“主显节”并改变了战术以至于我没有保存下来时,我确实在命令行中尝试了多种暴力手段。这些主要包括大量的连接尝试,但我仍然无法实现我想做的事情。因此,为什么我现在在这里问一个简单的SQL问题。
select distinct B.CEO_Name
from Store B, City C
where B.Store_Type=C.Store_Type;
-----
select distinct B.CEO_Name
from Store B, City C
where B.Store_Type=C.Store_Type;
INTERSECT
select COUNT(distinct Store_Type)
from City;
-----
select distinct C.Store_Type, D.CEO, COUNT(distinct C.Store_Type)
from City C, Store D
where C.Store_Type=D.Store_Type;
------
select D.CEO, COUNT(C.Store_Type)
from Store D, City C
where D.Store_Type=C.Store_Type;
------
select D.CEO, COUNT(C.Store_Type)
from Store D full outer join City C
on (D.Store_Type=C.Store_Type);
最佳答案
这样的事情应该起作用:
SELECT I.CEO_Name, J.num_stores, I.max_items
FROM
(SELECT S.CEO_Name, MAX(Items) AS max_items
FROM Store S
INNER JOIN City C ON C.Store_Type = S.Store_Type
GROUP BY S.CEO_Name) I
INNER JOIN
(SELECT S.CEO_Name, COUNT(DISTINCT S.Store_Type) AS num_stores
FROM Store S
INNER JOIN City C ON C.Store_type = S.Store_type
GROUP BY S.CEO_Name) J ON I.CEO_Name = J.CEO_Name
ORDER BY I.CEO_Name
该查询包括联接两个子查询以计算max_items和num_stores聚合,然后联接CEO_Name。