【问题标题】:SQL: how can I compare counts from 2 different tables but output the maxSQL:如何比较 2 个不同表的计数但输出最大值
【发布时间】:2016-02-10 22:09:48
【问题描述】:

所以我有 2 个数据表,一个名为 OCEAN,列:TYPE1 和 COLOR1 另一个名为 LAKE 的列是:TYPE2 和 COLOR2 我试图弄清楚如何从 OCEAN 表中输出 OCEAN 表中的类型比 LAKE 表中的类型更多的类型。

现在我有:

    SELECT type1 from
    (SELECT type1, count(type1) as count1 from OCEAN 
    GROUP BY type1
    HAVING count1 > count2 from 
    (SELECT type2, count(type2) as count2 from LAKE GROUP BY type2)
    )

但它显然不起作用。 有什么想法吗?

【问题讨论】:

  • 你能提供一些示例数据吗?还有什么是dbms(mysql、sql server等)

标签: sql count compare max


【解决方案1】:

我认为这是一个解决方案:

select type1
from ocean 
group by type1
having count(type1) > (
    select count(type2) from lake where type2=type1 group by type2)

您可以使用this online demo

【讨论】:

  • 不知道为什么,但是如果你在子查询中去掉不必要的group by type2,你会得到更好的性能
  • @JamieD77 我试过了,但是通过改进我有不同的解决方案。如果您删除“按类型分组”,当一个类型在海洋中但不在湖中时,我们会得到它(海洋中的计数> = 1,湖中的计数为 0)。在我的解决方案中,只会出现那些同时存在于海洋和湖泊中的类型。 my solutionyour solution。我希望你能明白这一点,英语不是我的主要语言。
  • @spaceboound 你能把这个答案作为解决方案吗? (绿色检查)
【解决方案2】:

您可以使用 OUTER APPLY.. 来做到这一点。

SELECT  Type1,
        COUNT(*) Type1Count,
        Type2Count
FROM    Ocean o
        OUTER APPLY (SELECT COUNT(*) Type2Count
                     FROM   Lake l
                     WHERE  l.Type2 = o.Type1
                    ) oa
GROUP BY Type1,
        Type2Count
HAVING  COUNT(*) > Type2Count

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多