1. 查询result表里的有2门课程大于60的人
name |
score |
A |
75 |
B |
70 |
C |
65 |
A |
75 |
B |
70 |
C |
56 |
A |
75 |
B |
41 |
C |
14 |
解析:
select name from result where score >60 group by name having COUNT(name)>=2
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。注意:group by 是先排序后分组
HAVING 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用
COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入)
当同时含有where子句、group by 子句 、having子句及聚集函数时,执行顺序如下:
执行where子句查找符合条件的数据;>60的人
使用group by 子句对数据进行分组;对group by 子句形成的组运行聚集函数计算每一组的值;最后用having 子句去掉不符合条件的组
2. 下面两个表
学生表 |
|
|
| |||
Student_ID |
Name |
Age |
| |||
1 |
Sam |
12 |
| |||
2 |
Tom |
13 |
| |||
3 |
Jim |
14 |
| |||
成绩表 |
|
|
| |||
Grade_ID |
Student_ID |
Subject_ID |
Score | |||
101 |
1 |
1101 |
85 | |||
101 |
1 |
1102 |
80 | |||
101 |
1 |
1103 |
95 | |||
102 |
2 |
1101 |
81 | |||
102 |
2 |
1102 |
86 | |||
102 |
2 |
1103 |
88 | |||
103 |
3 |
1101 |
90 | |||
103 |
3 |
1102 |
95 | |||
103 |
3 |
1103 |
96 | |||
查询个人平均成绩大于总体平均成绩的学生?
解析:
select DISTINCT 学生表.Student_ID,学生表.Name from 学生表 inner join 成绩表 on 学生表.Student_ID =
(select 成绩表.Student_ID from 成绩表
group by 成绩表.Student_ID having
avg(Score)>(select avg(Score) as 总体平均成绩 from 成绩表) )
通过Student_ID来联合2张表。
INNER JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name