PostgreSQL如何统计多列组合?计算每个乐手所属的乐队总数量
错误原因
- 原SQL的
GROUP BY子句包含了instrument字段,会将同一个乐手的不同乐器记录拆分为独立分组,所以id为2的乐手会返回两行结果 - 直接使用
count(id_band)统计时,同一个乐手在同一个乐队担任多个乐器的记录会被重复计数,无法得到准确的乐队总数量
正确实现方案
使用如下SQL即可满足需求:
SELECT e.id_musician, COUNT(DISTINCT e.id_band) AS band_total FROM MEMBER e GROUP BY e.id_musician ORDER BY e.id_musician;
实现逻辑说明
- 仅保留
id_musician作为分组依据,保证每个乐手仅对应一行统计结果 - 用
COUNT(DISTINCT e.id_band)统计每个乐手对应的不重复乐队ID数量,规避同一乐队多乐器记录导致的重复计数问题
输出结果示例
针对你提供的测试数据,执行后返回结果如下:
| id_musician | band_total |
|---|---|
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
内容的提问来源于stack exchange,提问作者Charles De Labra
相关产品推荐
相关产品推荐

