gpt4 book ai didi

sql - 条件计数: Performance differences in using SUM() vs COUNT()?

转载 作者:行者123 更新时间:2023-12-04 17:11:28 25 4
gpt4 key购买 nike

举一个非常简单的示例,假设我的表test带有示例数据,如下所示:

a     |     b      
-------------
1 | 18
1 | 24
1 | 64
1 | 82
1 | 10
1 | 7
2 | 5
2 | 18
2 | 66
2 | 72
3 | 81
3 | 97

对于每个 a,我要获得小于50的 b的数量。结果如下所示:
a     |   bcnt
--------------
1 | 4
2 | 2
3 | 0

现在,我可以通过以下两种方式之一来实现此结果:
SELECT a, COUNT(CASE WHEN b < 50 THEN 1 ELSE NULL END) AS bcnt
FROM test
GROUP BY a

或者:
SELECT a, SUM(CASE WHEN b < 50 THEN 1 ELSE 0 END) AS bcnt
FROM test
GROUP BY a

我知道这看似无关紧要的小事,但是我的问题是,就一种方式而言,使用一种方法相对于另一种方法是否有任何优势(但如此之小)?...它们将在多少种DBMS中工作?...陈述的清晰度?...等等。

最佳答案

Performance?



哦,我敢肯定,两者之间的差异(如果有的话)是微不足道的。我完全不用担心。

How many other DBMSs they would work in?



毫无疑问,我俩都至少可以在任何主要的SQL产品中使用,因此,再也不用担心这个问题,无论如何对我而言。

Clarity of statement?



当然 COUNT可以更清楚地表达您想要计数的东西,而不是累加一些任意值。使用 SUM,只有在浏览完条件后到达 THEN 1部分,您才能实现实际意图。

另外,如果我使用 COUNT,则可以省略 ELSE NULL部分,因为这是当缺少 ELSE时所隐含的含义。如果我在 ELSE 0表达式中省略 SUM,则最终可能会得到 NULL结果,而不是可能的预期 0

另一方面,可能存在完全相反的情况,由于计数的结果,返回 NULL而不是 0更方便。因此,如果我使用 COUNT,我将不得不做类似于 NULLIF(COUNT(CASE ...), 0)的操作,而对于 SUM(CASE ...),只需要忽略 ELSE子句即可。但是即使在那种情况下,我可能还是喜欢更长的清晰度而不是简短的简洁性(其他条件相同)。

关于sql - 条件计数: Performance differences in using SUM() vs COUNT()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11340540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com