当前位置: 首页 > news >正文

MySQL | group by 用法

例如:现在运营想要对每个学校不同性别的用户活跃情况和发帖数量进行分析,请分别计算出每个学校每种性别的用户数、30天内平均活跃天数和平均发帖数量。

用户信息表:user_profile

30天内活跃天数字段(active_days_within_30)

发帖数量字段(question_cnt)

回答数量字段(answer_cnt)

iddevice_idgenderageuniversitygpaactive_days_within_30question_cntanswer_cnt
12138male21北京大学3.47212
23214male复旦大学4.015525
36543female20北京大学3.212330
42315female23浙江大学3.6512
55432male25山东大学3.8201570
62131male28山东大学3.315713
74321male26复旦大学3.69652

你的查询返回结果需要对性别和学校分组,示例如下,结果保留1位小数,1位小数之后的四舍五入:

genderuniversityuser_numavg_active_dayavg_question_cnt
male北京大学17.02.0
male复旦大学212.05.5
female北京大学112.03.0
female浙江大学15.01.0
male山东大学217.511.0

求每个学校每种性别的用户数、30天内平均活跃天数和平均发帖数量

问题分解:

  • 限定条件:无;
  • 每个学校每种性别:按学校和性别分组:group by gender, university
  • 用户数:count(device_id)
  • 30天内平均活跃天数:avg(active_days_within_30)
  • 平均发帖数量:avg(question_cnt)
selectgender,university,count(device_id) as user_num,avg(active_days_within_30) as avg_active_days,avg(question_cnt) as avg_question_cnt
from user_profile
group by gender,university

该题涉及到了group by的分组计算,使用group by 时,数据库会根据一个或多个列的值将结果集分为多个分组,在每个分组内可以独立地使用聚合函数。

tips:

五、注意事项

  1. 选择非聚合列:在 SELECT 子句中,除了聚合函数计算的列外,所有列都应该在 GROUP BY 子句中列出。如果你选择了一个没有包含在GROUP BY 中的列,这通常会导致错误,因为没有聚合函数应用于它,数据库不知道如何为每个组选择一个值。
  2. NULL 值的分组:在分组时,GROUP BY 会将 NULL 值视为相同的值进行分组。这意味着所有 NULL 值会被归入同一组。
  3. 聚合函数的使用:在 SELECT 语句中可以使用多种聚合函数来计算每个组的统计信息,如 SUM()、AVG()、MAX()、MIN() 和 COUNT()。每个聚合函数都有其特定用途,选择合适的聚合函数可以帮助你获得需要的信息。
  4. HAVING 子句:如果你需要对分组后的结果进行过滤,应该使用 HAVING 子句而不是 WHERE 子句。WHERE子句在数据分组前进行过滤,而 HAVING 子句在数据分组后对分组的结果进行过滤。
  5. 性能考虑:GROUP BY 操作可能会涉及大量的数据处理,特别是在处理大型数据集时。合理地选择分组列和优化聚合函数的使用可以帮助提高查询的性能。
  6. 分组顺序:在 GROUP BY 子句中列出多个列时,数据首先按照第一个列的值进行分组,然后是第二个列的值,以此类推。分组顺序可能会影响到输出结果的排序,但不会影响到分组聚合的结果。
  7. 与ORDER BY共用:虽然 GROUP BY 会对输出结果进行一定的排序(按照分组列排序),但如果你需要特定的排序顺序,应明确使用 ORDER BY 子句。

http://www.mrgr.cn/news/36063.html

相关文章:

  • C++ vector容器迭代器失效
  • 音乐服务器测试报告
  • Python如何保存py文件
  • 植物大战僵尸杂交版v2.5.1最新版本(附下载链接)
  • 【linux】regulartor-fixed
  • c语言实现:链表创建、插入、删除、翻转
  • p2p、分布式,区块链笔记(OrbitDB.ControlCenter 003) :数据库接口 src\database\index.js
  • 设备程序驱动框架
  • 【Linux】解锁文件描述符奥秘,高效缓存区的实战技巧
  • MySQL: 数据类型介绍
  • 只要孩子感兴趣,学什么都不会白学
  • 如何根据拍立淘API返回值进行商品数据分析
  • USB-CAN的使用说明
  • QT开发模式(二):QML/JS/C++混合编程
  • 初识C#(二)- 流程控制
  • 微积分复习笔记(1):单变量微积分
  • 提取出来的ip与我原本的ip是在同一个区吗
  • Icarus翼星求生教你使用服务器开服
  • 鸿萌数据恢复:如何降低 RAM 故障风险,以避免数据丢失?
  • WebGL与Web Workers