/ / where句ごとに列を作成する - mysql、sql

where句ごとに列を作成する - mysql、sql

複数の条件に基づいて複数の列を作成し、時間ごとに集計するクエリを作成することは可能ですか?たとえば、次のような単純なテーブル:

id value created
1  45    datetime
2  52    datetime
3  24    datetime
4  33    datetime
5  20    datetime

私は年の10と20の間のすべての値を週のように得ることができます:

SELECT count(*) as "10-20", week(created) as "week", year(created) as "year"
FROM table
WHERE value > 10 AND value < 20
GROUP BY year(created), week(created)

これは私に例を与えます:

10-20 week year
40    1    2014
21    2    2014
3     33   2014

私は範囲のクエリを繰り返すことができます 20-30,30-40, 40-50 出力を手動で結合しますが、これらをテーブルに結合する単一のクエリが好きなので、出力は次のようになります。

10-20 20-30 30-40 40-50 week year
40    0     33    42    1    2014
21    1     0     2     1    2014
0     0     32    0     12   2014
3     42    34    32    33   2014

回答:

回答№1は1

COUNTの代わりにSUMを使用することができます。

このようなもの

SELECT SUM(IF(value > 10 AND value < 20), 1, 0) as "10-20",
SUM(IF(value > 20 AND value <  30), 1, 0) as "20-30",
SUM(IF(value > 30 AND value <  40), 1, 0) as "30-40",
SUM(IF(value > 40 AND value <  50), 1, 0) as "40-50",
week(created) as "week", year(created) as "year"
FROM table
WHERE
GROUP BY year(created), week(created)

ボーダー上にある値を持つアイテム(ここでは20)には、ここで問題があることに注意してください(元のコードでは)。

柔軟性はあなたがたぶん良いでしょう。範囲を格納する別のテーブルを使用して、それを結合して週/週の範囲ごとに1つの行を取得し、スクリプト内の行を列に変換します。範囲が追加されたときにコードを修正します。