having 是在之前select计算完以后再对之进行筛选
设有成绩表如下:
姓名 科目 分数
张三 数学 90
张三 语文 50
张三 地理 40
李四 语文 55
李四 政治 45
王五 政治 30
试查询两门及两门以上不及格同学的平均分
1.首先先查询所有人的平均分
select name, avg(score) from stu group by name;
2.查询不及格的数量
select name,sorce < 60 as gk from stu;
3.计算出同一个人挂科超过2科的
select name,count(sorce < 60) from stu group by name;
4.查询不及格超过2门以上的同学的平均分
select name, avg(score),sum(sorce < 60) as gk from stu group by name having gk >= 2;
29.select 5种子句之 order by #排序
select goods_id,goods_name from good where cat_id = 3 order by shop_price;
#这是一个升序的排序
根据字段排序, 可以升序也可以降序,default是升序
#这是一个降序的排序
select goods_id,goods_name from good where cat_id = 3 order by shop_price desc; #descend
想显式的升序排列 asc
select goods_id,goods_name from good where cat_id = 3 order by shop_price asc; #asc
30.mysql不等于 <>
31.select goods_id,goods_name from good where cat_id <> 3 order by cat_id;
如果仅根据cat_id无法排出 假如(cat_id都相同),那就在进行后面的排序
select goods_id,goods_name from good where cat_id <>3 order by cat_id, shop_price desc;
cat_id是升序 shop_price是降序
这里先对cat_id, 如果再分不出来的话 就用后面的shop_price desc进行降序的排序
select goods_id, goods_name from good order by goods_publish; #按照发布时间
32.Limit 在语句的最后,起到限制条目的作用
Limit[offset],,[n]
offet:偏移量(跳过多少个)
n :个数
如果offset不写 表示0,n #表示默认为0
#取价格第4到第8的三个商品
select goods_id, goods_name, shop_name from good order by shop_price Limit 3,4;