携手创作,共同成长!这是我参加「日新计划 8 月更文应战」的第24天
核算函数
- QL16查找GPA最高值
SELECT round(MAX(gpa),1)
FROM user_profile
WHERE university = '复旦大学'
或者参阅代码如下:
SELECT round(gpa,1)
FROM user_profile
WHERE university = '复旦大学'
ORDER BY gpa DESC
LIMIT 1
这儿是将gpa进行降序摆放,取第一个
- SQL17核算男生人数以及均匀GPA
参阅代码如下:
SELECT COUNT(gender) AS male_num,
ROUND(AVG(gpa),1) AS avg_gpa
FROM user_profile
WHERE gender IN ('male')
这儿的知识点有重新命名新列表的用法:
AS 列名
的用法
还有ROUND()函数,保存指定小数位数的用法
分组查询
- SQL18分组核算练习题
参阅代码如下:
SELECT gender,university,
COUNT(university) AS user_num,
ROUND(AVG(active_days_within_30),1) AS avg_active_days,
ROUND(AVG(question_cnt),1) AS avg_question_cnt
FROM user_profile
GROUP BY gender,university
COUNT(university/gender/device_id) AS user_num
- SQL19分组过滤练习题
参阅代码如下:
SELECT university,
ROUND(AVG(question_cnt),3) AS avg_question_cnt,
ROUND(AVG(answer_cnt),3) AS avg_answer_cnt
FROM user_profile
GROUP BY university HAVING avg_question_cnt < 5 OR avg_answer_cnt < 20
这一题的知识点就是havig函数的运用
之所以where不能运用的原因在于其关键字无法与聚合函数group by 一起运用;
原因:因为 where 的操作对象是一条记载,比如说当一条记载xxx时,在什么条件下可以用 where
但是涉及到多条记载时,比如说这儿的对象是从一组一组中再过滤到”均匀问问题书小于 5″ 的小组
这种情况下,where 就不适用了
此时,提供了 having 的关键词。
where 从记载中法过滤出某一条记载
having 可以从一组组记载中过滤掉其哪几组
- SQL20分组排序练习题
参阅代码如下:
SELECT university,
ROUND(AVG(question_cnt),4) AS avg_question_cnt
FROM user_profile
GROUP BY university
ORDER BY avg_question_cnt ASC
解析过程如下:
问题分解:
- 限定条件:无;
- 不同大学:按校园分组
group by university
- 均匀发帖数:
avg(question_cnt)
- 升序排序:
order by avg_question_cnt