如何在mysql中group by week

如何在mysql中group by week,第1张

易客CRM之前的版本中有一个报表是按月统计销售情况,最近有个客户想按周统计销售情况。按月统计的Sql语句比较好写,sql语句如下:

SELECT DATE_FORMAT(ec_salesorder.duedate,’%Y-%m’) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m,也就是把duedate日期以月的形式显示,然后groupby,那么按周如何统计呢?

搜了一下mysql的manual,在这里找到一个解决方法,通过mysql的week函数来做,sql语句如下:SELECT WEEK(ec_salesorder.duedate) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m,这个方法有个缺陷,不能显示年份,仅仅靠一个周数不方便查看统计信息。

继续研究mysql manual,在DATE_FORMAT函数介绍发现2个格式符和周有点关系:

%X Year for the week where Sunday is the first day of the week, numeric, four digitsused with %V

%x Year for the week, where Monday is the first day of the week, numeric, four digitsused with %v

把上面的Sql语句中改成:

SELECT DATE_FORMAT(ec_salesorder.duedate,’%x %v’) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m

显示的结果如下:

m total so_count

2009 11 10000.00 3

2009 12 44000.00 5

如果周日为一周的第一天,那么sql语句应该为:

SELECT DATE_FORMAT(ec_salesorder.duedate,’%X %V’) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m

结果应该没错,不出意外,易客CRM下个版本将增加按周统计销售情况的报表。

你的日期格式应该是这样:

2012-01-12

00:00:00

你可以把

2012-01-12

截取出来,这样就是按每天分组了

select

*

from

xxxx

group

by

SUBSTRING(column_name,1,10)

---这里的column_name是你的字段名称

以上是mysql数据库的,其他数据库的也类似

select

table.year,

table.month,

table.day

from

(SELECT

year(time)

year,

month(time)

month,

day(time)

day

FROM

table)

table

group

by

table.year,table.month,table.day

order

BY

table.year,table.month,table.day

desc

望采纳,有疑问或是有更好写法,请多交流


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8551797.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-17
下一篇 2023-04-17

发表评论

登录后才能评论

评论列表(0条)

保存