You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中使用GROUP BY遇到问题,请求技术解答

解决PostgreSQL GROUP BY统计平行班数量的问题

我来帮你分析下这个问题哈~

原语句的问题所在

你当前执行的SQL:

select id_curso, count(distinct paralelo) from clase group by id_curso, paralelo having count(distinct paralelo)>=1

核心问题出在GROUP BY的分组键上:你同时用了id_curso和paralelo作为分组依据,这意味着数据会被拆分成(id_curso, paralelo)的唯一组合分组。在每个这样的分组里,paralelo的值是唯一的(因为分组键已经包含它了),所以count(distinct paralelo)的结果必然是1,再加上having条件>=1,最终会返回所有(id_curso, paralelo)的组合,这显然不是你想要的统计每个课程下平行班数量的效果。

正确的SQL写法

你的需求应该是按课程ID(id_curso)分组,统计每个课程对应的不同平行班数量。调整后的SQL如下:

select id_curso, count(distinct paralelo) as num_paralelos
from clase
group by id_curso

补充说明:

  • 这里只需要按id_curso分组,这样每个分组会包含该课程下的所有平行班数据,count(distinct paralelo)就能统计出该课程的不同平行班数量。
  • having count(distinct paralelo)>=1这个条件可以省略,因为只要课程存在至少一条记录,统计结果就会>=1;如果需要过滤掉没有任何平行班的课程(你的数据里不存在这种情况),可以保留该条件。

优化写法(可选)

从你插入的数据来看,(id_curso, paralelo)的组合是唯一的(每个课程的每个平行班只有一条记录),这种情况下可以不用distinct,直接用count(*)或者count(paralelo),结果一致且性能更好:

select id_curso, count(*) as num_paralelos
from clase
group by id_curso

执行结果验证

根据你提供的测试数据,执行上述正确语句后会得到符合预期的结果:

id_cursonum_paralelos
11
22

内容的提问来源于stack exchange,提问作者Ask_Ay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:53:18