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