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

私はあなたのためにそれを持っていると思います...

まず、データから利用可能な明確な週を取得します...次に、データに結合しますが、具体的にはいずれかの週または週+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 に答える
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 
于 2013-05-02T13:30:33.743 に答える