汇总和分组数据

来源:互联网 发布:那个股票软件数据精确 编辑:程序博客网 时间:2024/04/29 02:50

1.聚合函数
sum()  求和      avg()  求平均值     min() 返回最小值   max() 返回最大值  count() 返回记录行数  
例:
select count(*) as '操作员个数' from  j_user        ----// 返回共有多少个操作员
注意:
        count(*) 统计所有记录行的数目
        count(字段名)只统计指定列上有非空值的记录条数

例句:    要求查询自营店06年至07年两年共销售了多少数量与金额?
select sum(a.nums) as '数量',sum(a.s_price*nums) as '金额'
from d_retailsub a join d_retail b on a.retailid=b.retailid
where sure_date between '2006-01-01' and '2007-12-31' and b.sure=1
返回:
    数量             金额
-------------------------------------
53849           29621042.94 

2.分组汇总
例句:  要求查询自营店06年中每个月的销售、每个月的各个小类也需要汇总
select datepart(mm,sure_date) as '销售月份',j_style.st_xz as '小类',    --//datepart(mm,sure_date) 从日期中提取月份出来
sum(d_retailsub.s_price*nums) as '金额' from d_retail join d_retailsub    --//聚合函数sum(d_retailsub.s_price*nums)计算出金额
on d_retail.retailid=d_retailsub.retailid join j_style on d_retailsub.styleid=j_style.styleid  --//左联接
where sure_date between '2006-01-01' and '2006-12-31' and d_retail.sure=1   --// between 指定截止时间
group by datepart(mm,sure_date),j_style.st_xz      --//分组汇总时可以指定多个汇总条件
order by datepart(mm,sure_date),j_style.st_xz      --//排序时也可以指定多个排序条件

返回:
销售月份 小类  金额
---------------------------------------------------------
8  衬衫  46084.70
8  领带  819.00
8  牛仔裤  29378.05
8  皮包  7306.80
8  皮带  16922.35
      ……
9  长袖衬衫 5457.50
9  衬衫  95265.55
9  毛衫  8099.25
9  牛仔裤  64497.35
9  牛仔衫  3722.40
9  皮包  8967.00
      ……
10  长袖衬衫 65581.80
10  衬衫  156121.15
10  毛衫  120830.65
10  牛仔裤  231993.75
10  牛仔衫  2682.90
10  皮包  17133.95
      ……


3. select 语句执行的顺序
from 子句组装来自不同的数据源的数据;
where 子句基于指定的条件对记录进行筛选;
group by 子句将数据分为多个组;
使用聚集函数进行分组;
使用 having 子句筛选分组;
计算所有的表达式;
使用 order by 对结果进行排序;

例句:使用 having 子句对分组进行筛选
         要求查询自营店2006年10月份每天销售大于50000元的记录

select datepart(dd,sure_date) as '销售日期',sum(d_retailsub.s_price*nums) as '金额'  --//datepart(mm,sure_date) 从日期中提取日出来
from d_retail join d_retailsub on d_retail.retailid=d_retailsub.retailid     --//左联接
where sure_date between '2006-10-01' and '2006-10-31' and d_retail.sure=1   --// between 指定截止时间
group by datepart(dd,sure_date)        --//分组汇总时可以指定多个汇总条件
having sum(d_retailsub.s_price*nums)>50000      --//having 对分组后的金额进行筛选
order by datepart(dd,sure_date)        --//排序

返回:
      销售日期    金额
----------------------------------------------------------------
 8 58621.60
 9 105024.55
 11 72197.25
 12 212132.00
 13 61351.70
 16 292789.75
 17 76108.20
 23 z107167.15
 26 119742.70
 27 76721.70
 28 76259.40
 29 80773.21
 30 60864.75

 

 

 

 

 

 

 

原创粉丝点击