如何用SQL按Metric列的整数值分组统计行数?
解决SQL分组统计Metric值行数的问题
嘿,作为SQL新手遇到这种问题太正常啦,我来帮你捋清楚~
首先看你的需求:统计Metric列中每个整数值对应的总行数。你的原SQL语句是:
SELECT COUNT(Metric) FROM tablename GROUP BY Metric
这个语句报错的核心原因是:你没有把分组依据的Metric列包含在SELECT查询列表里。大多数SQL数据库(比如MySQL、PostgreSQL、SQL Server等)都有规则:当使用GROUP BY分组时,SELECT里的列要么是GROUP BY中的列,要么是被聚合函数(比如COUNT、SUM)处理过的列。你的语句只返回了统计数,却没对应显示是哪个Metric值的统计结果,数据库无法识别这种逻辑,所以抛出错误。
正确的SQL语句
想要得到你期望的结果,我们需要把Metric列加入SELECT列表,同时给统计列起一个别名(和你想要的Count列名对应),优化后的语句如下:
SELECT Metric, COUNT(*) AS Count FROM tablename GROUP BY Metric;
对这个语句的关键点解释:
Metric:加入到SELECT后,就能在结果中看到每个分组对应的具体数值COUNT(*):统计每组的总行数,相比COUNT(Metric)更通用——如果Metric列存在NULL值,COUNT(Metric)会忽略这些行,而COUNT(*)会包含所有行,你的数据里都是有效整数,两者都能用,但COUNT(*)更稳妥AS Count:给统计结果列起别名,让输出的列名和你期望的一致
匹配你期望的排序结果
如果想要结果里Metric按降序排列(先显示6,再显示3),只需要加上ORDER BY子句:
SELECT Metric, COUNT(*) AS Count FROM tablename GROUP BY Metric ORDER BY Metric DESC;
执行这个语句后,就能得到和你完全一致的输出:
Metric | Count 6 | 2 3 | 2
内容的提问来源于stack exchange,提问作者J. Ayo
相关产品推荐
相关产品推荐

