SQL:利用 having 实现分组过滤
前言
很多朋友在进行数据库检索的时候,都会遇到需要进行分组过滤的情况
比如:现在运营想查看每个学校用户的平均发贴和回帖情况,寻找低活跃度学校进行重点运营,请取出平均发贴数低于5的学校或平均回帖数小于20的学校。
本文将对这个例题进行分析,主要介绍 having 函数的用法
例题链接:SQL19 分组过滤练习题
一、having简介
用法:当聚合函数结果作为筛选条件时,不能用where,而是用having语法,配合重命名进行使用
更多内容可以参考:GROUP BY和HAVING用法介绍
数据库查询语句 – HAVING的用法
二、用法分析
//数据库表结构
id device_id gender age university gpa active_days_within_30 question_cnt answer_cnt
1 2138 male 21 北京大学 3.4 7 2 12
2 3214 male null 复旦大学 4.0 15 5 25
3 6543 female 20 北京大学 3.2 12 3 30
4 2315 female 23 浙江大学 3.6 5 1 2
5 5432 male 25 山东大学 3.8 20 15 70
6 2131 male 28 山东大学 3.3 15 7 13
7 4321 female 26 复旦大学 3.6 9 6 52
//搜索语句
select
university,
avg(question_cnt) as avg_question_cnt,
avg(answer_cnt) as avg_answer_cnt
from user_profile
group by university
having avg_question_cnt < 5 or avg_answer_cnt < 20