您的位置:首页 > 数据库 > MySQL

MySQL 5种常用查询语句-group

2017-02-25 00:00 246 查看
摘要: group

group by 分组查询,一般配合统计函数来使用

max:求最大
min:求最小

sum:求总和
avg:求平均值
count:求总行数


数据库如下表所示

idnameage学号编号
1lee10Null0
2骚猪33Null1
3张鹏22Null1
4大表哥12000010

统计函数:

max 取最大值

用法1:select max(列名) from 表名; 单条数据

select max(age) from msg;




用法2:select id,name,max(age),学号 from 表名; 多条数据查询,用逗号隔开,仅在MySQL 中使用,但无意义,应为数值没有对应。如果有意义,必须要加 group by

select id,name,max(age),学号 from msg;




用法3:select max(列名) from 表名 group by 列名 #注意 group by 列名 (该列名必须是可以分组的列 )

如:取编号1,编号2这2组中,年龄最大的人,查询结果有几组,就有几行

select id,max(age) from msg group by 编号;




sum 求总和

如,求4个人总年龄

select sum(age) from msg;


min 求最小

avg 求平均值

count 求总行数

如,求总人数(行数)

select count(*) from msg;

注意:count 只能统计行数,无论 count() 中的内容是什么,如下图所示,如果要统计每个人的挂科的数量



错误写法:

select name,count(fs<60) from cj group by name;
-- count(fs<60) 并不是统计 fs<60的 个数,它依然统计行数

-- 所以得到结果
/*
+------+--------------+
| name | count(fs<60) |
+------+--------------+
| 张三 |            3 |
| 李四 |            2 |
| 王五 |            1 |
+------+--------------+

*/

正确写法:

select name,sum(fs<60) from cj group by name;
/*
1、fs <60  得到结果 为0 或1
2、求xx条件用sum ,不能用count
+------+------------+
| name | sum(fs<60) |
+------+------------+
| 张三 |          2 |
| 李四 |          2 |
| 王五 |          1 |
+------+------------+
*/


给列名加1个别名:as

select 编号 as分组 from msg;

with rollup

用来在分组统计数据的基础上再进行统计汇总,即用来得到group by的汇总信息

SELECT name, SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP




其中记录 NULL 表示所有人的登录次数。
我们可以使用 coalesce 来设置一个可以取代 NUll 的名称,coalesce 语法:

SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MySQL Group