携手创作,共同成长!这是我参加「日新计划 8 月更文应战」的第24天

核算函数

  • QL16查找GPA最高值

SQL学习之高级查询

因为题目要求保存一位小数点,而且四舍五入\ 所以这儿需要运用round函数

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

SQL学习之高级查询

参阅代码如下:

SELECT COUNT(gender) AS male_num,
ROUND(AVG(gpa),1) AS avg_gpa
FROM user_profile
WHERE gender IN ('male')

这儿的知识点有重新命名新列表的用法: AS 列名的用法
还有ROUND()函数,保存指定小数位数的用法

分组查询

  • SQL18分组核算练习题

SQL学习之高级查询

参阅代码如下:

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分组过滤练习题

SQL学习之高级查询

参阅代码如下:

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分组排序练习题

SQL学习之高级查询

参阅代码如下:

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