我有一个问题:
SELECT
COUNT(id) as amount,
DATEDIFF(expire, buydate) as days
FROM `vw8mv_orders`
GROUP BY MONTH(expire)
结果是:
amount days
1 22
1 30
1 105
1 161
我想在一个组中(每 30 天)查看这些结果。如果天数在1到30天之间,则将其放入30天组,如果投注31-60,则放入60天组,依此类推。
例如:
amount time
2 30 days
0 60 days
1 90 days
最佳答案
您需要创建一个计算列作为分组依据。您可以使用多种方法进行计算,但一个不错的选择可能是使用 DIV operator 进行整数除法。 :
SELECT
COUNT(id) as amount,
(((datediff(expire, buydate) DIV 30) + 1) * 30) as timegroup
FROM
table
GROUP BY timegroup;
我喜欢这种方法的原因,而不是使用例如 some fancy arithmetic with ROUND()
,是不是更清楚您要做什么。 datediff(expire, buydate) DIV 30
说,取这些日期的差值,然后告诉我该数字中“有多少个 30”。
这就是您分组所需的全部内容;剩下的就是让列以您想要的方式显示,如 30, 60, 90, ...
而不是 0, 1, 2, ...
.
如果您对整数除法不满意,另一种选择是 CEILING
function :
SELECT
COUNT(id) as amount,
30 * CEILING(datediff(expire, buydate) / 30) as timegroup
FROM
table
GROUP BY timegroup;
从数学上讲,CEILING(x/N)
等同于((x DIV N) + 1)
,但它与CEILING 的关系不大()
。
关于mysql - 按 "every 30 days"对 mysql 结果进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23545695/