3

我有一个类似的表:

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 周分组,而是按每 2 周分组。

所以按第 1 周和第 2 周、第 2 周和第 3 周、第 3 周和第 4 周、第 4 周和第 5 周等分组

如果可能,自动生成,但可以在查询之外为周分组生成 sql。

谢谢。

4

3 回答 3

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

....... 。ETC。

所以试试这个:

SELECT COUNT(*), week/2 
FROM data 
GROUP BY week/2 
于 2013-05-02T13:30:33.743 回答
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

在这里演示

输出

  COUNT    week
    6       1
    2       2
于 2013-05-02T13:41:40.400 回答
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`
于 2013-05-02T14:41:40.743 回答