GROUP BY将多个值分组为同一组

时间:2013-05-02 13:26:57

标签: mysql group-by

我有一张类似的表:

ID      WEEK
1       1
2       1
3       1
4       2
5       2
6       3
7       3
8       3

这是我目前的查询:

SELECT COUNT(*), `week` FROM data GROUP BY `week`

这是一个sqlfiddle http://sqlfiddle.com/#!2/bfdb6/2/0

我需要的是每2周将行分组到相同的COUNT中。

所以不要这样:

COUNT(*)    WEEK
3           1
2           2
3           3
3           4

我会得到:

COUNT(*)    WEEK
5           1
5           2
6           3
3           4

每周还会有下一周的COUNT加入。


问题修正:

我应该清楚我真正需要的东西。

不是将第1周和第3周分组,而是我需要的是每两周分组。

因此按第1周和第2周,第2周和第3周,第3周和第4周,第4周和第5周等分组

尽可能自动,但可以在查询周围生成一周的分组。

感谢。

3 个答案:

答案 0 :(得分:1)

创建一个表示组存储桶的案例表达式:

SELECT COUNT(*), case When week In (1,3) Then 'W13' Else 'W2' End
FROM data 
GROUP BY case When week In (1,3) Then 'W13' Else 'W2' End

根据编辑的帖子,如果周是整数,除以2将创建你想要的,因为

 week    week/2
   0         0
   1         0
   2         1
   3         1
   4         2
   5         2

.......。等。

所以试试这个:

SELECT COUNT(*), week/2 
FROM data 
GROUP BY week/2 

答案 1 :(得分:1)

你可以寻找这个

   SELECT 
   case When week In  (1,3) Then ( select count(week) from data
                           where week in (1,3) ) 
   else ( select count(week) from data
                           where week =2 ) end count , week
   FROM data 
   group by count
  order by count desc

DEMO HERE

输出

  COUNT    week
    6       1
    2       2

答案 2 :(得分:1)

我想我已经帮你了......

首先,从数据中获取不同的周数...... 然后,加入数据,但特别是在一周或一周+1

我将它应用于您现有的SQLFiddle,它似乎有效。

select
      JustWeeks.`week`,
      Count(*) as TwoWeekSum
   from
      ( select distinct
              `week`
           from
              data ) JustWeeks
      JOIN data 
         ON JustWeeks.`week` = data.`week`
         OR JustWeeks.`week` +1 = data.`week`
   group by
      JustWeeks.`week`