sql - SQL 查询以计算每个不同值的出现次数
问题描述
我有一个包含 2 个字段的表:userid和value。可以有多行具有相同的userid。值列可以是 5 个不同的值之一。
我想为每个userid输出一个摘要行,计算每个不同值出现在输入中的次数。也就是说,摘要行具有以下列:userid、值 1的计数、值 2的计数、值 3的计数、值 4的计数和值 5 的计数
例子
1,4
1,3
2,1
3,5
4,1
5,2
输出将是
1,0,0,1,1,0
2,1,0,0,0,0
3,0,0,0,0,5
4,1,0,0,0,0
5,0,1,0,0,0
有什么建议么?
解决方案
解决方案
select userid,
sum(case value when 1 then [occurs] else 0 end) as countOf1,
sum(case value when 2 then [occurs] else 0 end) as countOf2,
sum(case value when 3 then [occurs] else 0 end) as countOf3,
sum(case value when 4 then [occurs] else 0 end) as countOf4,
sum(case value when 5 then [occurs] else 0 end) as countOf5
from
(
select userid, [value], count(*) as [occurs]
from inputTable
group by userid, [value]
) t
group by userid
order by userid
假设
我从您的问题中收集到相同的输入行值可能会出现多次,尽管您的示例数据并未显示这种可能性。但是,如果每个不同的行只能出现一次,则可以使用更简单/更短的解决方案。
警告
您声明输入中的 [value] 列可以是 5 个不同的值之一。我的解决方案就是基于这个“要求”。它为每个不同的值包含一行代码。但是,如果不同值的数量可以随时间增长或者是无限的,则需要使用动态 SQL 的不同方法。
推荐阅读
- c# - UTF-8 删除 BOM
- laravel - 形状上的 mpdf 专色
- python - 子类作为单例
- c# - 如何将数组添加到另一个数组中
- react-router - 使用带有 babel-plugin-react-css-modules 的 React Router v6
- php - 在 PHP 中使用 msg_send() 会导致错误 11... 找不到解决方案
- node.js - 错误:“npm install -g @ionic/cli”给了我“4 个高严重性漏洞”和“ERR!错误号-4058'
- javascript - JS中改变角色类类型的方法
- java - 布尔监听器
- vue.js - IIS 中托管的 Vue、Asp.Net Core 无法正常工作