如何使用COUNT(*)返回单行而不是多行?
在SQL查询中,我们经常用到COUNT()函数来统计数据表中符合条件的记录数。但是返回的结果可能是多行,而有时候我们只需要返回一行结果。怎样才能用COUNT()函数返回单行结果呢?
阅读更多:MySQL 教程
例子
假设我们有一个学生成绩表(score),其中包含以下字段:
字段名 | 数据类型 |
---|---|
id | int |
name | varchar |
subject | varchar |
score | int |
我们想知道每个科目的总人数。使用COUNT(*)函数可以轻松完成:
SELECT subject, COUNT(*) FROM score GROUP BY subject;
运行以上代码,将得到类似如下的结果:
subject | COUNT(*) |
---|---|
Chinese | 4 |
Math | 3 |
English | 5 |
Geography | 2 |
可以看到,这个查询结果显示了每个科目的总人数。但是结果是以多行呈现,如果只希望结果以单行形式出现该怎么办呢?
解决方法
我们可以使用子查询的方式把多行结果合并成一行。改进代码如下:
SELECT COUNT(DISTINCT id) AS total FROM score;
或者使用以下代码:
SELECT COUNT(*) FROM (SELECT DISTINCT id FROM score) AS t;
以上两句代码的含义是一样的:COUNT(DISTINCT id)可以计算表格中不同的id总数,AS total为返回的表格重命名为total来表示总数。第一个代码比较容易理解,第二个代码是包含一个子查询的高级 SQL 用法。
如果把他们嵌套在我们的查询中:
SELECT subject, (
SELECT COUNT(DISTINCT id)
FROM score AS t
WHERE t.subject = score.subject
) AS total
FROM score
GROUP BY subject;
运行以上代码,将得到唯一的一行结果,类似如下:
subject | total |
---|---|
Chinese | 4 |
Math | 3 |
English | 5 |
Geography | 2 |
现在我们成功地使用COUNT(*)函数返回单行结果了,总人数得到了统计。
结论
本文介绍了如何使用COUNT(*)函数返回单行结果:使用子查询的方式把多行结果合并成一行。这是一个常见的SQL技巧,希望对大家有所帮助。