星空2020 2022-07-30 14:15 采纳率: 64.1%
浏览 59
已结题

mysql如何统计周的数据?

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月第42    180
4月第51    91
5月第11    98
5月第24    275
5月第33    119
  • 写回答

3条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-07-31 18:17
    关注

    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;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月14日
  • 已采纳回答 8月6日
  • 创建了问题 7月30日

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同