首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在SQL Server中执行Count和GroupBy时,如何保留0值条目?

在SQL Server中执行Count和GroupBy时,如何保留0值条目?
EN

Stack Overflow用户
提问于 2020-11-14 02:46:24
回答 2查看 58关注 0票数 0

我已经尝试过isnull,但如果该库中的计数为0,它仍然会忽略某些库中的数据。我使用group by来计算每个组中的观察值数量。对于观测值为0的组,SQL不会打印该组的任何行。我想要该组的一行和相应的0值。

我已经尝试过了:Keep zero values with GROUP BY and SUM in mysql

谢谢!

使用数据编辑:

代码语言:javascript
运行
复制
Vector = [1, 2, 2, 3, 4, 5, 5, 9, 10, 10]

我想要计算一下上述数据中落入垃圾箱的观测值数量:

代码语言:javascript
运行
复制
[1-2, 3-4, 5-6, 7-8, 9-10]

结果应该是

代码语言:javascript
运行
复制
[3,2,2,0,3]

不管我得到了什么

代码语言:javascript
运行
复制
[3,2,2,3]
EN

回答 2

Stack Overflow用户

发布于 2020-11-14 03:17:06

您可以创建"bin“派生表,并对其进行连接:

代码语言:javascript
运行
复制
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;

输出:

代码语言:javascript
运行
复制
+----+-----+-----+
| a  | b   | cnt |
+----+-----+-----+
| 1  |  2  |   3 |
| 3  |  4  |   2 |
| 5  |  6  |   2 |
| 7  |  8  |   0 |
| 9  | 10  |   3 |
+----+-----+-----+
票数 1
EN

Stack Overflow用户

发布于 2020-11-14 03:28:38

这里有一种方法,它将bin创建为单独的列。然后使用CONCAT_WS和QUOTENAME创建最终的字符串。像这样的东西

代码语言:javascript
运行
复制
declare @Vector         varchar(max)='1, 2, 2, 3, 4, 5, 5, 9, 10, 10';

with
range_cte(n) as (
    select * from (values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10)) v(n))
select quotename(concat_ws(',',
       sum(case when sc.value in(1, 2) then 1 else 0 end) ,
       sum(case when sc.value in(3, 4) then 1 else 0 end) ,
       sum(case when sc.value in(5, 6) then 1 else 0 end) ,
       sum(case when sc.value in(7, 8) then 1 else 0 end) ,
       sum(case when sc.value in(9, 10) then 1 else 0 end)),'[]')
from range_cte rc 
     left join string_split(@Vector, ',') sc on rc.n=sc.value;

输出

代码语言:javascript
运行
复制
[3,2,2,0,3]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64826410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档