结合DISTINCT和COUNT查询MySQL表列的不同值出现次数
在MySQL中,我们可以使用DISTINCT和COUNT两个函数来查询每个列中不同值的次数。这两个函数都是非常常用的,所以掌握它们对于我们学习MySQL也是非常关键的。
阅读更多:MySQL 教程
DISTINCT函数
DISTINCT函数可以用来对查询结果集中的字段去重。当我们查询一个表的某一列时,如果这个列中存在重复的值,我们希望去掉这些重复的值,只留下不同的值,那么我们就可以使用DISTINCT函数。
以一个名为users
的表为例,我们现在需要查询这个表中不同的性别(gender)种类及其出现的次数。我们可以使用以下SQL语句:
SELECT COUNT(DISTINCT gender) AS gender_num, gender FROM users GROUP BY gender;
这条SQL语句的含义是:先对gender字段进行去重操作,然后按照不同的性别分组,统计每个分组中的记录数。输出结果如下:
+------------+--------+
| gender_num | gender |
+------------+--------+
| 100 | M |
| 80 | F |
+------------+--------+
这张表格告诉我们,在users
表中,男性和女性的数量分别为100和80,没有重复的记录。
COUNT函数
COUNT函数的作用是统计某一列或某一行中的记录数。我们可以使用COUNT函数来计算不同值出现的次数。
以同样的users
表为例,我们现在需要查询每个地区(location)中不同职业(job)的数量。我们可以使用以下SQL语句:
SELECT COUNT(job) AS job_num, job, location FROM users GROUP BY job, location;
这条SQL语句的含义是:按照职业和地区进行分组,然后统计每个分组中不同职业的数量。输出结果如下:
+----------+--------+----------+
| job_num | job | location |
+----------+--------+----------+
| 10 | Doctor| Beijing |
| 15 | Teacher| Beijing |
| 20 | Engineer| Beijing |
| 12 | Doctor| Shanghai|
| 18 | Teacher| Shanghai|
| 22 | Engineer| Shanghai|
| 15 | Doctor| Guangzhou|
| 10 | Teacher| Guangzhou|
| 18 | Engineer| Guangzhou|
+----------+--------+----------+
这张表格告诉我们,在users
表中,北京地区有10个医生、15个老师和20个工程师,上海地区有12个医生、18个老师和22个工程师,广州地区则有15个医生、10个老师和18个工程师。
结合DISTINCT和COUNT函数
当我们需要查询每个MySQL表列中出现的每个不同值的次数时,可以将DISTINCT和COUNT函数结合起来使用。以users
表的职业(job)字段为例,我们可以使用以下SQL语句:
SELECT COUNT(DISTINCT job) AS job_num, job FROM users GROUP BY job;
这条SQL语句的含义是:先对职业字段进行去重操作,然后按照不同的职业分组,统计每个分组中的记录数。输出结果如下:
+----------+-----------+
| job_num | job |
+----------+-----------+
| 3 | Doctor |
| 3 | Teacher|
| 3 | Engineer |
+----------+-----------+
这张表格告诉我们,在users
表中,有3种不同的职业,每种职业出现的次数均为3次。
我们也可以使用COUNT(*)来统计每个MySQL表列中出现的每个不同值的次数。以users
表的性别(gender)字段为例,我们可以使用以下SQL语句:
SELECT COUNT(*) AS gender_num, gender FROM (SELECT DISTINCT gender FROM users) AS t GROUP BY gender;
这条SQL语句的含义是:先对性别字段进行去重操作,然后按照不同的性别分组,统计每个分组中的记录数。需要注意的是,我们在外部嵌套了一层子查询,是为了对去重后的结果进行计数。输出结果如下:
+------------+--------+
| gender_num | gender |
+------------+--------+
| 1 | M |
| 1 | F |
+------------+--------+
这张表格告诉我们,在users
表中,有1种男性和1种女性,每种性别出现的次数均为1次。
结论
我们可以结合DISTINCT和COUNT函数来查询每个MySQL表列中不同值出现的次数。具体操作方法是:先使用DISTINCT函数去重,然后使用COUNT函数统计不同值的出现次数。通过这种方式,我们可以更好地了解MySQL表中数据的分布情况,从而更好地制定数据库的查询优化策略。