首页 > 解决方案 > 在 SQL Server 中执行 Count 和 GroupBy 时如何保持 0 值条目?

问题描述

我已经尝试过isnull,但如果该箱中的计数为 0,它仍然会遗漏某些数据箱。我正在使用 group by 来计算每个组中的观察次数。对于具有 0 个观察值的组,SQL 不会为该组打印一行。我想要该组的一行和相应的 0 值。

我试过这个:在 mysql 中使用 GROUP BY 和 SUM 保持零值

谢谢!

用数据编辑:

Vector = [1, 2, 2, 3, 4, 5, 5, 9, 10, 10]

我想计算上面落入垃圾箱的观察次数:

[1-2, 3-4, 5-6, 7-8, 9-10]

结果应该是

[3,2,2,0,3]

但是我得到

[3,2,2,3]

标签: sqlsql-server

解决方案


您可以创建“bin”派生表并对其进行 LEFT JOIN:

SELECT bin.a, bin.b, COUNT(v.val) AS cnt
FROM (VALUES (1,2),(3,4),(5,6),(7,8),(9,10)) bin(a,b)
LEFT JOIN vector v
  ON v.val BETWEEN bin.a AND bin.b
GROUP BY bin.a, bin.b
ORDER BY bin.a, bin.b;

db<>小提琴演示

输出:

+----+-----+-----+
| a  | b   | cnt |
+----+-----+-----+
| 1  |  2  |   3 |
| 3  |  4  |   2 |
| 5  |  6  |   2 |
| 7  |  8  |   0 |
| 9  | 10  |   3 |
+----+-----+-----+

推荐阅读