如何使用COUNT(*)返回单行而不是多行?

如何使用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技巧,希望对大家有所帮助。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程