5.sql2008分组与嵌套
1.Group by基本介绍;
2.Having的使用;
3.分组综合应用;
4.子查询基本介绍;
5.In/Exists/Any/Some/All;
6.子查询综合应用;
1.Group by基本介绍:依据BY提供的规则,将数据集划分为若干个小区域,然后对小区域进行处理.
--认清实质:按照指定字段将相同的分为一组,成为一个集合,这样就会有多个小集合.然后按照指定字段(不指定就为*)用聚合函数统计.
A.客户男女各多少人:
select csex as '性别',COUNT(*) as '人数'
--一旦分组只能写分组字段和聚合函数,中间不能再写其他字段.
from customer
group by 性别
B. 统计出每一类商品中的最高的价格;
select 商品ID ,max(商品价格) as '最高价格'
from 商品表
group by 商品ID
C.查询出出售数量最多的商品的货号;
select 商品ID,count(*)
from 明细表
group by 商品ID
order by count(*) desc
这只销售最多的排序.应该再嵌套一次:
select 商品ID,count(*)
from 明细表
group by 商品ID
having count(*)=
(
select tip 1 count(*)
from 明细表
group by 商品ID
order by count(*) desc
)
group by all
示例:统计出2016年客户购物情况:
select cno ,count(*) as '购物数量'
from 明细表
where 购物日期 between '2016-1-1' and '2016-12-31'
group by cno
order by count(*) //排序
如果加上all会把在此时间段未购物的也统计出来.
示例:统计出购物数量多于两件的客户姓名及数量,按照数量降序排列.
分析:需要使用客户表和购物明细表两个表,利用分组将客户号和数量大于2的找到,然后再将两个表关联查询后得出结果.(对分组后的数据进行筛选加条件必须使用having子句.)
select cname,t2.购物量字段
from customer t1,
(
select cno,count(*)
from 明细表
group by cno
having count(*)>2
) t2
where t1.cno=t2.cno
order by t2.购物量字段 desc
!!!做分组查询时,select语句后面只能是分组的字段名或者聚合函数.
嵌套查询:
可以嵌套在select中,也可以嵌套在from中,还可以嵌套在where中.
示例1.统计出哪些客户购买了多少件商品.(select,from)
示例2.查询出售最多的商品名字.(where)