2016-05-23 11 views
0

私のMySqlデータベースのデータを使用してMorrisチャートのデータ配列を入力しようとしています。値の種類ごとに合計とグループを選択してください

合計、データや種類によってグループ化:

ID Value Kind Date 
1 200  L  2016-01-01 
2 250  B  2016-01-01 
3 250  L  2016-01-01 
4 200  B  2016-02-01 
5 250  B  2016-02-01 
6 200  L  2016-02-01 

が、私はこのように私に出力を与えるクエリをしたい:

は、私はこのようなテーブル「buchungen」を持っています。 450、2月のLと250 B

:450 Bと200 L

必要な構造:私のクエリで

[{"m":"1","a":"450","b":"250},{"m":"2","a":"200","b":"450}] 

SELECT MONTH(date) AS m, SUM(value) AS a 
FROM `buchungen` 
WHERE YEAR(date) = YEAR(CURDATE()) 
GROUP BY MONTH(date) 
月の

私は以下の構造を得ます:

[{"m":"4","a":"476852.64"},{"m":"5","a":"851866.74"}] 

私は「kind」フィールドをどのように考慮するか分からないという問題があります。これどうやってするの?

ありがとうございます!

答えて

3

これを試してみてください:

SELECT MONTH(date) AS m, 
     SUM(CASE WHEN Kind = 'L' THEN value ELSE 0 END) AS a, 
     SUM(CASE WHEN Kind = 'B' THEN value ELSE 0 END) AS b 
FROM `buchungen` 
WHERE YEAR(date) = YEAR(CURDATE()) 
GROUP BY MONTH(date) 
+2

を一口のビットは、私がWHERE日付 '推測しますがCONCAT(YEAR(CURDATE())、 ' - 01-01')とCONCAT(YEAR(CURDATE())、 '-12-31') 'はより速くなります – Strawberry

+0

これはうまくいきます。ありがとう! 「空の」月の値を出力する方法もありますか? 1月に出力された1月の 'buchungen'に何もなかった場合、0、b 0? –

+0

@FlorianSauerweinこれにはカレンダーテーブルを使用する必要があります。 –

0

あなたは、日付や種類によってグループ化され、値の合計を望んで述べたように、これを試してみてください。

SELECT MONTH(date) AS m, kind, SUM(value) AS a FROM `buchungen` WHERE YEAR(date) = YEAR(CURDATE()) GROUP BY MONTH(date), kind; 
関連する問題