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(项目),但它必须是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);
答案 0 :(得分:1)
这样的事情应该有效:
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。