MySQL之分组查询


-- 按照用户所属身份分组proId
select * from cms_user group by proId;

-- 向用户表中添加性别字段 
alter table cms_user add sex enum('男','女','保密');

update cms_user set sex='男' where id in(1,3,5,7,9);

update cms_user set sex='女' where id in(2,4,6,8,10);

update cms_user set sex='保密' where id in(11,12);

-- 按照用户性别分组 
select * from cms_user group by sex;

-- 按照字段位置分组
select * from cms_user group by 7;

-- 按照多个字段分组 
select * from cms_user group by sex,proId;

-- 查询编号大于等于5的用户按照性别分组 
select * from cms_user where id>=5 group by sex;

分组查询配合聚合函数

-- 统计表中所有记录 
select count(*) AS totalUsers from cms_user;

-- count(字段) 不统计NULL值


-- 查询编号,性别,用户名详情,组中总人数,组中最大年龄,最小年龄
-- 平均年龄,以及年龄总和和按照性别分组
-- 配合聚合函数 count(),max(),min(),avg(),sum() 
select id,sex,group_concat(username),
count(*) AS totalUsers,
max(age) AS max_age,
min(age) AS min_age,
avg(age) AS avg_name,
sum(age) AS avg_name
from cms_user group by sex;

-- WITH ROLLUP  记录所有的记录的总和 
select id,sex,group_concat(username),
count(*) AS totalUsers,
max(age) AS max_age,
min(age) AS min_age,
avg(age) AS avg_name,
sum(age) AS avg_name
from cms_user group by sex with rollup;

having语句对分组结果进行二次查询

-- 查询组中人数大于2的 
select sex,group_concat(username) AS users,
count(*) AS totalUsers,
max(age) AS max_age,
sum(age) AS sum_age
from cms_user group by sex
having count(*)>2;

-- 查询组中人数大于2并且最大年龄大于60的 
select sex,group_concat(username) AS users,
count(*) AS totalUsers,
max(age) AS max_age,
sum(age) AS sum_age
from cms_user group by sex
having count(*)>2 and max(age)>60;

-- 查询编号大于等于2的用户 
select sex,group_concat(username) AS users,
count(*) AS totalUsers,
max(age) AS max_age,
sum(age) AS sum_age
from cms_user
where id>=2 
group by sex
having count(*)>2 and max(age)>60;

ORDER BY对查询结果进行排序

-- 按照id 降序排列desc 默认的是asc
-- 默认升序asc 
select * from cms_user order by id;
-- 升序
select * from cms_user order by id asc;
-- 降序
select * from cms_user order by id desc;

-- 按照年龄升序,id降序排列 
select * from cms_user order by age asc,id desc;

select id,age,sex,group_concat(username),count(*) AS totalUsers,sum(age) AS sum_age 
from cms_user 
where id>=2
group by sex
having count(*)>=2
order by age desc,id asc;

-- 实现记录随机 
select * from cms_user order by rand();

通过LIMIT限制显示条数
limit是实现分页的核心

-- 查询表中前三条记录  
select * from cms_user limit 3;

-- 查询表中前一条记录 
-- LIMIT 显示条数 
select * from cms_user limit 1;
-- LIMIT 偏移量,显示条数
select * from cms_user limit 0,1;

select id,sex,age,group_concat(username),
count(*) AS totalUsers,
max(age) AS max_age,
min(age) AS min_age,
avg(age) AS avg_age,
sum(age) AS sum_age
from cms_user
where id>=1
group by sex
having count(*)>=2
order by age desc 
limit 0,2; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值