SQL 知识量:22 - 44 - 129
对于聚集函数可以按照如下方式使用:
对所有行执行计算,指定all参数或省略all(all是默认行为)。
只包含不同的值,需要指定distinct参数。
在以上情形下,distinct表示的含义与all正好是相对应的,distinct表示数据不允许重复,而all表示包含所有记录,包括重复的行。
例如:有如下访客记录表(visitor)。
+----+-------+---------+ | id | name | country | +----+-------+---------+ | 1 | Bob | USA | | 2 | Jame | NULL | | 3 | Susan | UK | | 4 | Chen | China | | 5 | Koco | Japan | | 6 | Sophy | NULL | | 7 | Susan | UK | | 8 | Bob | USA | +----+-------+---------+
现在按照姓名查询访问人次。
select count(name) from visitor;
结果:
+-------------+ | count(name) | +-------------+ | 8 | +-------------+
以上计算结果中包含了重复的姓名(所以才叫人次),如果要查询累计有多少人访问过,就需要排除重复的情况,使用distinct就可以做到了。
select count(distinct name) from visitor;
结果:
+----------------------+ | count(distinct name) | +----------------------+ | 6 | +----------------------+
注意:
distinct不能用于count(*)。类似的,distinct只能使用列名,不能用于计算或表达式。
Microsoft Access不支持distinct。
在实际应用中,select语句可以根据需要,同时使用多个聚集函数。
例如:查询学生的人数、最大年龄、最小年龄及平均年龄。
select count(name),max(age),min(age),avg(age) from student;
结果:
+-------------+----------+----------+----------+ | count(name) | max(age) | min(age) | avg(age) | +-------------+----------+----------+----------+ | 10 | 13 | 10 | 11.1000 | +-------------+----------+----------+----------+
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6