27-1 分组-having

group by

select * from TblStudent
--1.请从学生表中查询出每个班的班级id和班级人数
select
    tsclassId as 班级id,
    班级人数=count(*)
from TblStudent
group by tsclassId
--请统计出,所有学生中男同学和女同学的人数分别是多少
select
    tsGender as 性别,
    人数=count(*)
from TblStudent
group by tsGender 


--2.请从学生表中查询出每个班的班级id和班级中男同学的人数
select
    tsclassId as 班级id,
    男同学人数=count(*)
from TblStudent
where tsGender=''
group by tsclassId
--------------------------------------------------
--当使用了分组函数group by或者是聚合函数的时候,在select的查询列表中不能再包括其他的列名,除非该列同时也出现在了group by子句中,或者该列也包含在了某个聚合函数中
select
   sum(tsage),
   性别=tsGender,
   人数=count(*)
from TblStudent
group by tsGender

having

----对分组以后的数据进行筛选:使用having
--having和where都是对数据进行筛选,where是对分组前的每一行数据进行筛选,而having是对分组后的每一组数据进行筛选
select
    tsclassId as 班级id,
    班级人数=count(*)
from TblStudent
group by tsclassId
having count(*)>10

SELECT 语句的处理顺序

以下步骤显示SELECT语句的处理顺序。

1、FROM

2、ON

3、JOIN

4、WHERE

5、GROUP BY

6、with cube 或with rollup

7、HAVING

8、SELECT    8-1>选择列     8-2>distinct    8-3>top(应用top选项最后计算)

10、ORDER By

11、TOP

----------------------练习--------------------------
select * from MyOrders
--1.热销售商品排名表【即按照每种商品的总销售数量排序】
select 
    商品名称,
    销售数量=sum(销售数量)
from MyOrders
group by 商品名称
order by 销售数量 desc


--2.请统计销售总价超过3000元的商品名称和销售总价,并按销售总价降序排序。
select
    商品名称,
    销售总价=sum(销售数量)*销售价格 
from MyOrders
group by 商品名称
having sum(销售数量)*销售价格>3000
order by 销售总价 desc 


--3.统计各个客户对“可口可乐”的喜爱度(既统计每个购买人对“可口可乐”的购买量)
select 
    购买人,
    可口可乐购买量=sum(销售数量)
from MyOrders
where 商品名称='可口可乐'
group by 购买人
order by 可口可乐购买量 desc

注意:可以按照多列来排序,也可以按照多列来分组(即先按照一列来分组,再按照一组再进行分组)

原文地址:https://www.cnblogs.com/Strugglinggirl/p/7203794.html