分组在mysql中设置值

时间:2016-06-29 20:53:35

标签: mysql sql group-by

我有一个表格,用于显示用户的访问持续时间(以分钟为单位)。我希望将分钟值分组 - 在增加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查询。

2 个答案:

答案 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)
;