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。

10-04 11:55