COUNT(*)
----------
18
mysql> select count(*) from students;
+----------+
| count(*) |
+----------+
| 7 |
+----------+
1 row in set (0.00 sec)
group by 子句
通过group by 子句,可以在表中达到将数据分组的目的。将表的行分为若于组,这些组中的行并不重复。然后通过列函数分别组诗每个级,这样每个组都有一个统计值。
group by 子句中,columnName用于指定分组的列或表达式,可以指定一个或多个表达式作为分组依据。当依据单列分组时,会基于列的每个不同值生成一个数据统计结果;
当依据多列分组时会基于多个列的不同值生成统计结果,MySQL好像不支持依据多列进行统计。
eg;按班长ID对students表进行排序
SQL> select monitor_id from students group by monitor_id;
MONITOR_ID
----------
10101
10301
10205
mysql> select monitor_id from students group by monitor_id;
+------------+
| monitor_id |
+------------+
| NULL |
| 10101 |
| 10205 |
+------------+
4 rows in set (0.20 sec)
eg:按专业及班长ID对students表进行分组
SQL> select specialty,monitor_id from students group by specialty, monitor_id;
SPECIALTY MONITOR_ID
---------- ----------
计算机
机电工程
自动化
自动化 10205
机电工程 10301
计算机 10101
eg:求students表中男生和女生的人数分别为多少。
SQL> select sex, count(sex) from students group by sex;
SEX COUNT(SEX)
------ ----------
男 12
女 6
having 子句
group by 子句用于指定分组的依据,而having子句则指定条件,用于限制分组显示的结果。having 子句中的condition用于指定限制分组的条件。
having子句必须与group by子句一起使用,而group by子句通常是单独使用的。
eg:检索教师平均工资高于2000的系部,显示系部号、平均工资。
SQL> select department_id, avg(wage) from teachers group by department_id having
avg(wage)>2000;
DEPARTMENT_ID AVG(WAGE)
------------- ----------
102 2240
103 2220