分组计算
在使用count
, sum
等聚合函数时,如果不加限制就是统计所有结果行,但有时这不是预期的结果。如果要分类统计的话,需要使用group by
将结果分类,这样它们便会按照分类进行计算。
如统计不同学校不同型别的人数:
1 | select gender,university, count(id) as user_num, |
分组过滤(聚合函数作为约束需要用having)
如果要过滤聚合函数计算出来的结果,只能用having子句,不能使用where。同时注意having子句需要放在group by之后。
1 | select university, avg(question_cnt) as ac, avg(answer_cnt) as qc |
多表查询
查询需要的约束条件在另一个表中,使用select子句返回约束结果。
1 | select device_id, question_id, result |
三表查询
需要查询的数据在表之间互相依赖,使用join
将表先连接起来再查询。
1 | select university, difficult_level, (count(d.question_id) / count(distinct(u.device_id))) |
1 | SELECT university, difficult_level, (count(q.question_id) / count(distinct(q.device_id))) |
多表查询(约束为func)
获取每个部门中当前员工薪水最高的相关信息 : 不仅需要获取部门内最高薪水,还需要获取最高薪水的员工是谁。
1 | -- 这题的关键是需要确定最大薪水的员工是谁 |
联合查询
满足任意一种条件的都可以,并且不去重
1 | SELECT device_id, gender, age, gpa from user_profile |
结果分类
对于查询结果,按照是否满足某个条件或在某个范围内 分别对应不同的结果。
对与二分类,可方便的使用if,case when也可以
1 | -- 统计大于和小于25岁人的数量 |
1 | -- 统计每个人分别属于哪个年龄段 |