sql - 使用每个 ID 的代码频率创建列
问题描述
我必须执行一个查询,我可以计算每个 ID 的不同代码的数量。
|Id | Code
------------
| 1 | C
| 1 | I
| 2 | I
| 2 | C
| 2 | D
| 2 | D
| 3 | C
| 3 | I
| 3 | D
| 4 | I
| 4 | C
| 4 | C
输出应该是这样的:
|Id | Count | #Code C | #Code I | #Code D
-------------------------------------------
| 1 | 2 | 1 | 1 | 0
| 2 | 3 | 1 | 0 | 2
| 3 | 3 | 1 | 1 | 1
| 4 | 2 | 2 | 1 | 0
你能给我一些建议吗?
解决方案
使用条件聚合:
select id, count(*) as cnt,
sum(case when code = 'C' then 1 else 0 end) as code_c,
sum(case when code = 'I' then 1 else 0 end) as code_i,
sum(case when code = 'D' then 1 else 0 end) as code_d
from t
group by id;
推荐阅读
- python - 使用应用返回错误基于 2 列创建新列
- rabbitmq - Rabbitmq 服务器启动失败
- react-native - 在 react-native-nfc-manager v2 中禁用声音
- python - 有没有办法在输入后预先写一些东西?
- rust - Rust 为模块保留的名称
- linux-kernel - 如何卸载使用 ACPI_CONFIG_SYSFS 加载的覆盖
- node.js - 将所有IP地址列入白名单,仍然无法连接到mongodb atlas集群
- python - SyntaxError:无法分配给函数调用 Python
- java - 将所有用户输入数据写入 jmeter beanshell PostProcessor 中的 csv 文件中且非重复用户?
- python - 过滤熊猫中的数据,其中字符串位于多列中