如何获取单列count值?单列表格状态值分组计数方法咨询
嘿,我来帮你搞定这两个SQL统计问题:
问题1:如何获取单个列的count值?
这里分几种常见场景,你可以按需选择:
- 统计该列所有非空值的数量:用
COUNT(列名),比如你的列叫status,语句就是:
这个会忽略列中的NULL值,只统计有实际内容的行。SELECT COUNT(status) FROM your_table; - 统计该列去重后的非空值数量:如果想知道这个列里有多少种不同的值,用
COUNT(DISTINCT 列名):SELECT COUNT(DISTINCT status) FROM your_table; - 要是你想统计整个表的总行数(不管该列是否为空),直接用
COUNT(*)就行,不过如果是单列表且没有NULL值的话,和COUNT(列名)结果一致。
问题2:按状态分组统计各值出现次数
这个用GROUP BY配合COUNT(*)就能轻松实现,假设你的表叫status_table,列名是status,基础语句如下:
SELECT status, COUNT(*) AS 出现次数 FROM status_table GROUP BY status;
执行后会得到类似这样的结果:
| status | 出现次数 |
|---|---|
| good | 2 |
| bad | 2 |
| average | 2 |
| need to improve | 1 |
如果想要输出格式更贴近你要的「Good 2、average 2...」这种(比如把首字母大写),可以根据你用的数据库调整:
- 如果你用PostgreSQL/Oracle,用
INITCAP()函数统一首字母大写:SELECT INITCAP(status) AS 格式化状态, COUNT(*) AS 出现次数 FROM status_table GROUP BY status; - 如果是MySQL,需要用字符串拼接来实现首字母大写:
SELECT CONCAT(UPPER(SUBSTRING(status, 1, 1)), LOWER(SUBSTRING(status, 2))) AS 格式化状态, COUNT(*) AS 出现次数 FROM status_table GROUP BY status;
要是想直接拼成「Good 2」这样的字符串结果,可以再加一层字符串拼接:
PostgreSQL示例:
SELECT CONCAT(INITCAP(status), ' ', COUNT(*)) AS 统计结果 FROM status_table GROUP BY status;
执行后每一行就是你想要的格式啦。
内容的提问来源于stack exchange,提问作者Pavan Kumar
相关产品推荐
相关产品推荐

