MySQL 5种常用查询语句-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;

 

转载于:https://my.oschina.net/esdn/blog/846412

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值