sql语句查询今年单价总金额

假设有一张orders表,orders中有id,total,created_at 三个字段,total是价格.created_at是创建时间
分别求
1.一天的订单总额和一天24小时各个小时的金额总数,
2.一周的订单总额和一周7天,7天分别的金额总数,
3.一个月的订单总额和一个月中各天数的金额总数,
4.一个季度的订单总额和一个季度中不同月份的金额总数,
5一年的订单总额和一年中各个月份的金额总数。
想做一个类似树状图一样的东西,用来展示数据。
自己想的笨方法就是,把一年的数据全拿出来,再分门别类,但是感觉如果数据量多的话,程序会卡死,数据库会查爆的。
不知大家有什么想法可以分享讨论下没
最新回答
日暮盼佳人

2021-09-29 09:08:36

年,季,月,周,天,小时
也就是说你要的是这个六个分别的金额与汇总。
按照从大到小,如果仅仅是按照现有的表来操作,那么个人觉得毫无疑问的要查6遍,每次汇总都是一遍,如果数据量大的话毫无疑问的卡死。
个人觉得可以先改造一下表,将时间字段分成这六个部分,然后分组的时候加上rollup,只要注意书写顺序,那么一次应该就可以了。这是我能想到的减小运算量的一个办法。
梦明

2023-03-04 02:52:59

sqlserver :

1.  一天的订单总额 : select sum(total ) from  orders

where  created_at>='2019-05-16 00:00:00'

and    created_at<'2019-05-17 00:00:00'

一天24小时各个小时的金额总数

select   convert(varchar(2),GETDATE(),14) ,sum(total ) from  orders

where  created_at>='2019-05-16 00:00:00'

and    created_at<'2019-05-17 00:00:00'

group by   convert(varchar(2),GETDATE(),14)

2. 一周的订单总额 

select   sum(total ) from  orders

where  DATEDIFF(WK,created_at,GETDATE()) =0

7天分别的金额总数

select convert(varchar(10),getdate() ,120),sum(total ) from  orders

where  DATEDIFF(WK,created_at,GETDATE()) =0

group by  convert(varchar(10),getdate() ,120) 

3. 一个月的订单总额 

select   sum(total ) from  orders

where  DATEDIFF(MM,created_at,GETDATE()) =0

一个月中各天数的金额总数

select convert(varchar(10),getdate() ,120),sum(total ) from  orders

where  DATEDIFF(MM,created_at) =0

group by  convert(varchar(10),getdate() ,120) 

4. 一个季度的订单总额 

select   sum(total ) from  orders

where  DATEDIFF(Quarter,created_at,GETDATE()) =0

一个季度中不同月份的金额总数

select MONTH(created_at),sum(total ) from  orders

where  DATEDIFF(Quarter,created_at) =0

group by  MONTH(created_at)

5.一年的订单总额

select   sum(total ) from  orders

where  DATEDIFF(YEAR,created_at,GETDATE()) =0

一年中各个月份的金额总数

select MONTH(created_at),sum(total ) from  orders

where  DATEDIFF(YEAR,created_at) =0

group by  MONTH(created_at)

就行解答

收起 1条折叠回答