初始化表(以student表为例):
create table if not exists student
(
id int null,
name varchar(50) null,
age int null,
sex varchar(2) null,
score double null
)
comment '学生表';
INSERT INTO student (id, name, age, sex, score) VALUES (1, '张三', 18, '男', 70);
INSERT INTO student (id, name, age, sex, score) VALUES (2, '李四', 17, '男', 60);
INSERT INTO student (id, name, age, sex, score) VALUES (3, '王五', 19, '男', 80);
INSERT INTO student (id, name, age, sex, score) VALUES (4, '赵六', 16, '男', 90);
INSERT INTO student (id, name, age, sex, score) VALUES (5, '七七', 16, '女', 95);
INSERT INTO student (id, name, age, sex, score) VALUES (6, '九九', 17, '女', 85);
INSERT INTO student (id, name, age, sex, score) VALUES (7, '十一', 18, '女', 80);
INSERT INTO student (id, name, age, sex, score) VALUES (8, '小明', 19, '男', 90);
INSERT INTO student (id, name, age, sex, score) VALUES (9, '小军', 17, '男', 55);
INSERT INTO student (id, name, age, sex, score) VALUES (10, '小雷', 19, '女', 60);
案例1:查询学生表中,成绩在80分以上的数据
select * from student having score >= 80
等同于:
select * from student where score >= 80
having使用的错误:
select
id
,name
,age
from student
having score >= 80 -- 报错,score筛选条件没有出现在select中
where使用的错误:
select
id
,name
,age
,score as fenshu
from student
where fenshu >= 80 -- 报错,where子句中不能使用字段别名
案例2:求各个年龄段的平均分和年龄
select age,avg(score) from student group by age
如下:
案例3:求学生平均分大于80分的年龄段及平均分
select
age
,avg(score)
from student
group by age
having avg(score) > 80
-- 结果为16岁
案例4:查询学生年龄平均分大于80分中,男生的信息(姓名,男生的分数)
select
name
,sex
,age
,score
from student
where sex = '男'
group by name,sex,age,score
having avg(score) > 80
结果: