mysql如何统计周的数据?
需求输出结果格式:
周次 销售次数 销售量
2022-4月第4周 2 180
2022-4月第5周 1 91
2022-5月第1周 1 98
2022-5月第2周 4 275
2022-5月第3周 3 119
CREATE TABLE IF NOT EXISTS `tb1`(
`id` INT UNSIGNED AUTO_INCREMENT,
`qty` VARCHAR(100) NOT NULL,
`date` DATETIME,
PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO tb1 (qty,date) values
('23','2022-01-23 08:00'),
('43','2022-02-22 08:20'),
('43','2022-03-13 08:20'),
('43','2022-03-23 08:20'),
('43','2022-04-23 08:20'),
('43','2022-04-23 08:20'),
('43','2022-05-23 08:20'),
('43','2022-06-23 08:20'),
('43','2022-06-03 08:20'),
('13','2022-06-13 05:00')
sql server可以通过如下方式获得,mysql是如何操作的呢?
--按周统计 (月份周次)
SELECT weekName 周次,count(1) 销售次数, sum(qty) 销售量 from (
SELECT cast(datepart(month,date) as varchar(2)) + '月第'+ cast((datepart(week,date) - datepart(week,convert(varchar(7),date,120) + '-01') + 1) as varchar(2)) + '周' weekName,Num
FROM tb1
WHERE year(date)=year(getdate())
)tb
GROUP BY weekName
周次 销售次数 销售量
4月第4周 2 180
4月第5周 1 91
5月第1周 1 98
5月第2周 4 275
5月第3周 3 119
mysql里用week函数就好了,如下
select week(date),count(1),sum(qty) from tb1 group by week(date)
但要注意下,每周是从周几开始,这个是通过数据库参数设置的,当然你也可以通过指定week函数的第2个参数,来灵活地确定是从周几开始算一周
和你题目中sqlserver转换的原理一样,你题目里,实际上是算出指定日期在年的第几周,然后再算出指定日期的对应月份的1号在年的第几周,把这两个周数相减,再加1,就是这个月的第几周了
写sql的时候,脑子里不要一直想着先学会不同数据库的函数语法,语法这东西,不会的,网上都可以搜。
重点是理解逻辑,比如要找指定日期的所在月份的第一天,不会写,直接搜,一大把的,然后就能直接套进去。
将自己的需求拆解成多个小需求,每个小需求都是常用的,能用简单的语言描述的,网上基本都能找到对应的解答,你所需要做的仅仅只是把每个小需求的解答像搭积木一样组合起来。
select month(date),week(date)-week(DATE_ADD(date,interval -day(date)+1 day))+1 from tb1
group by month(date),week(date)-week(DATE_ADD(date,interval -day(date)+1 day))+1;
用sql肯定是不行的,有两中情况可以做
1、将数据库里面的日期 合计成周 154周,然后在通过后台去转换为 2022-09-012022-09~08这种格式
2、就是这个周为前端参数,后台就可以直接拿来查询就行了
可以参考我的博客,有一篇,周报,月报,年报的
首先制作一张日期维度的数据表 然后作为主表 left join 你的业务数据
http://t.csdn.cn/05XqJ
里面有生成日期维度数据的脚本虽然是sqlserver的,但可以复制到MySQL数据表里面。