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

数据库MYSQL学习总结20—GROUP BY对记录进行分组

2019-04-18 19:11 387 查看
版权声明:. https://blog.csdn.net/WildestDeram/article/details/89374430

GROUP BY对记录进行分组

把值相同放到一个组中,最终查询出的结果只会显示组中一条记录

[code]-- 测试分组
-- 按照性别分组sex
SELECT id,username,sex FROM test3.user
GROUP BY sex;

[code]-- 分组配合GROUP_CONCAT()查看组中某个字段的详细信息
-- 按照性别分类,查询组中的用户名有哪些
SELECT GROUP_CONCAT(username),age,sex,addr FROM test3.user
GROUP BY sex;

 

[code]-- 如果想统计人数就要配合聚合函数来使用 COUNT()统计记录总数 SUM()求和 MAX() MIN() AVG()平均值

-- 测试COUNT()
-- 测试表中有多少条记录
SELECT COUNT(*) FROM test3.user;

-- 还可以给改记录取名,然后可以通过名称取得对于的值
SELECT COUNT(*) AS total_user FROM test3.user;

-- 如果写的是COUNT(字段名称),字段中的值为NULL,不会进行统计
-- 写COUNT(*)会统计NULL值

 

 

 

[code]-- 按照sex分组,得到用户名详细,并且分别组中的总人数
SELECT sex,GROUP_CONCAT(username) AS userDetail,COUNT(*) AS totalUser FROM test3.user
GROUP BY sex;

[code]-- 按照addr分组,得到用户名的详情,总人数,得到组中年龄的总和,年龄的最小值,最大值,平均值
SELECT addr,
GROUP_CONCAT(username) AS userDetail,
COUNT(*) AS totalUser,
SUM(age) AS sum_age,
MAX(age) AS max_age,
MIN(age) AS min_age,
AVG(age) AS avg_age
FROM test3.user
GROUP BY addr;

 

 

[code]-- 配合WITH ROLLUP关键使用 会在记录末尾添加一条记录,是上面所有记录的总和
SELECT GROUP_CONCAT(username) AS user_name,
COUNT(*) AS user_sum
FROM user
GROUP BY sex
WITH ROLLUP;

 

[code]-- 按照字段的位置来分组
SELECT addr,sex,
GROUP_CONCAT(id) AS ID,
GROUP_CONCAT(username) AS oo,
COUNT(*) AS totalUser,
SUM(age) AS sum_age,
MAX(age) AS max_age,
MIN(age) AS min_age,
AVG(age) AS avg_age
FROM test3.user
GROUP BY 2;

[code]-- HAVING子句对分组结果进行二次筛选
-- 按照sex分组,统计人数<=4
-- HAVING后面可以加通过聚合函数操作的列
SELECT sex,
GROUP_CONCAT(username) AS OO,
COUNT(*) AS TT
FROM user
GROUP BY sex
HAVING COUNT(*)<=4;

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: