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)



原文地址:https://www.cnblogs.com/yangwenlong/p/7905749.html