SELECT u.university university,q2.difficult_level difficult_level,count(u.device_id)/count(distinct u.device_id) avg_answer_cnt
FROM user_profile u
INNERJOIN question_practice_detail q1
ON u.device_id=q1.device_id
INNERJOIN question_detail q2
ON q1.question_id=q2.question_id
GROUPBY u.university,q2.difficult_level
HAVING u.university='山东大学'
2.3.3 运行结果
2.3.4 考察知识点
① 如果有分组和特定条件,先筛选后分组和先分组后筛选都可以,哪种熟悉就用哪种
若筛选完之后发现有个键是取不到的,如山东大学,那就直接对唯一的值
进行一次排序就行,聚合键是一定可以拿到的
② 如果()里面的值不写别名,默认的字段名就是查询时原表的字段名
③想用括号里面的表 需要再后面写上表别名,通过别名.字段名去调用
以下是本题的另外一种写法
SELECT u.university university,q2.difficult_level difficult_level,
count(u.device_id)/count(distinct u.device_id) avg_answer_cnt
FROM (SELECT * FROM user_profile WHERE university='山东大学') u
INNER JOIN question_practice_detail q1
ON u.device_id=q1.device_id
INNER JOIN question_detail q2
ON q1.question_id=q2.question_id
GROUP BY u.university,q2.difficult_level
3 组合查询
3.1 查找山东大学或者性别为男生的信息
3.1.1 题目内容
3.1.2 示例代码
SELECT device_id,gender,age,gpa
FROM user_profile
WHERE university='山东大学'UNIONallSELECT device_id,gender,age,gpa
FROM user_profile
WHERE gender='male'
3.1.3 运行结果
3.1.4 考察知识点
union all 表示两种查询结果的并集且不去除重复行
如果是单union 就代表是去除重复行
union要求两者的字段个数、字段类型完全一致才可以进行拼接