使用GROUP BY获取分组首行b值及分组计数的SQL查询问题
实现按列分组并获取首行指定列值及分组数量的单条SQL语句
可以通过窗口函数结合子查询实现单条SQL完成需求,不用拆分两个独立查询。假设你的表名为your_table,SQL语句如下:
SELECT a, b, count FROM ( SELECT a, b, COUNT(*) OVER (PARTITION BY a) AS count, ROW_NUMBER() OVER (PARTITION BY a ORDER BY (SELECT NULL)) AS rn FROM your_table ) t WHERE rn = 1;
语句说明:
COUNT(*) OVER (PARTITION BY a):通过窗口函数直接计算每个a分组下的总条目数,无需单独分组统计。ROW_NUMBER() OVER (PARTITION BY a ORDER BY (SELECT NULL)):给每个a分组内的行分配唯一编号,ORDER BY (SELECT NULL)表示不指定特定排序规则,直接取分组内的首行;如果需要按某列排序取首行,比如按c列升序排列,可改为ORDER BY c ASC。- 外层查询筛选出每个分组中编号为1的行,即可得到每个分组的首行
b值及对应分组的条目数量。
验证结果:
针对你提供的原表数据,执行上述语句后将得到:
| a | b | count |
|---|---|---|
| 1 | x | 2 |
| 2 | y | 1 |
内容的提问来源于stack exchange,提问作者Aliaaa
相关产品推荐
相关产品推荐

