就像一个非常简单的例子,假设我有一个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
,我要计算有多少b
个 < 50。结果如下所示:
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 中工作?... 陈述的清晰性?... 等等。