我有一个表格,用于显示用户的访问持续时间(以分钟为单位)。我希望将分钟值分组 - 在增加10的桶中,并计算每个桶中的项目数,如下所示:
duration(minutes) count
0 20
10 400
20 1400
30 100
一直到最大分钟值。持续时间桶显示的值表示存储桶的上限值,因此它实际上是这样的:
duration(minutes) count
0 - 10 20
11 - 20 400
21 - 30 1400
31 - 40 100
etc
不确定如何为此设置mysql查询。
答案 0 :(得分:0)
您总是可以对计算结果进行分组,在这种情况下,这样的事情是合适的:
SELECT 10 * ((mins-1) DIV 10) AS groupVal, COUNT(*)
FROM theTable
GROUP BY groupVal
;
但是,您的范围有些模糊,因为0-10重叠10-20重叠20-30,依此类推。分组意图可能在查询中更清晰,如此......
SELECT CASE
WHEN mins >= 0 AND mins <= 10 THEN 0
WHEN mins > 10 AND mins <= 20 THEN 10
WHEN mins > 20 AND mins <= 30 THEN 20
WHEN mins > 30 AND mins <= 40 THEN 30
ELSE -1
END AS groupVal
, COUNT(*)
FROM theTable
GROUP BY groupVal
;
这些应该适用于MySQL;如果您使用的是MS SQL,则不能在GROUP BY
子句中使用别名groupVal,而是需要克隆第一个示例中的计算或第二个示例中的整个CASE ... END
。
答案 1 :(得分:0)
你可以分割然后舍入结果
SELECT TRUNCATE(duration / 10, 0) * 10 as duration(minutes), count(*) as `count`
FROM table
GROUP BY TRUNCATE(duration / 10, 0)
;