sql数据库如何统计总订单数量大于某值的记录?

2025-11-08 10:14:00

1、创建一个临时表,用于演示sqlserver数据库中,如何在订单表上,先分类统计,然后再次筛选数据

IF OBJECT_ID('tempdb..#tblOrder') IS NOT NULL DROP TABLE #tblOrder; 

CREATE TABLE #tblOrder(

    OrderID varchar(50),    -- 订单号

    OrderLine int,               -- 订单行号

    OrderTotal int              -- 订单数量     

);

sql数据库如何统计总订单数量大于某值的记录?

2、往临时表中1插入几行测试数据,模拟订单数据,此处假设是订单明细数据,所以订单号是可以重复的

insert into #tblOrder(OrderID, OrderLine, OrderTotal) values('PO00001', 1, 1000);

insert into #tblOrder(OrderID, OrderLine, OrderTotal) values('PO00001', 2, 2000);

insert into #tblOrder(OrderID, OrderLine, OrderTotal) values('PO00001', 3, 3000);

insert into #tblOrder(OrderID, OrderLine, OrderTotal) values('PO00002', 1, 4000);

insert into #tblOrder(OrderID, OrderLine, OrderTotal) values('PO00003', 1, 5000);

sql数据库如何统计总订单数量大于某值的记录?

3、查询临时表1中的测试数据

select * from #tblOrder;

sql数据库如何统计总订单数量大于某值的记录?

4、按照订单号汇总所有的数量,这个时候就需要使用到group by分组语句,以及sum统计函数

select '订单号' = OrderID, '总数量' = sum(OrderTotal)

from #tblOrder

group by OrderID

sql数据库如何统计总订单数量大于某值的记录?

5、在汇总完成订单数量的基础上,如何筛选出总订单数超过4000的订单号以及数量呢?最简单的方式就是,嵌套SQL,再次筛选,实现方式如下

select '订单号' = tmp.OrderID, '总数量' = tmp.OrderTotal

from(

     select OrderID, OrderTotal = sum(OrderTotal)

     from #tblOrder

     group by OrderID

)tmp

where tmp.OrderTotal > 4000

sql数据库如何统计总订单数量大于某值的记录?

6、虽然,上面的SQL也实现了需求,但是,看起来SQL语句较多。如何才能不使用嵌套SQL呢?先看下面的SQL,表面上看起来,有点像这么回事,但是,实际却达不到效果。下面的SQL统计的是,订单明细数量大于4000的值汇总,而不是总订单数量大于4000的订单数量汇总

select '订单号' = OrderID, '总数量' = sum(OrderTotal)

from #tblOrder

where OrderTotal > 4000

group by OrderID

sql数据库如何统计总订单数量大于某值的记录?

7、当实际业务再复杂一些,获取的字段再多一些的时候,不想使用嵌套SQL的时候,就可以使用having语句了

select '订单号' = OrderID, '总数量' = sum(OrderTotal)

from #tblOrder

group by OrderID

having sum(OrderTotal) > 4000

sql数据库如何统计总订单数量大于某值的记录?

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢