2017-02-15 6 views
0

異なるデータ型を持つ複数の変数についてデータベースをクエリしたいと思います。WHEREを使わないで複数の条件を指定したMySQLクエリ

私のクエリは次のようになります。

SELECT var1, var2, 
     SUM(CASE WHEN var3 ='2008' AND var4='A1_U18' THEN var5 ELSE 0 END) AS 'A1_U18_7', 
     SUM(CASE WHEN var3='2015' AND var4='A1_U18' THEN var5 ELSE 0 END) AS 'A34_U15_0', 
     CASE WHEN var3 = '2015' AND var4 = 'A0_RISE' THEN var5 ELSE 0 END AS 'A0_RISE' 
FROM dataset1 
GROUP BY var1 

実は私は最初の2つのクエリの結果を総括する必要はありませんが、そうでなければ、私は出力として「0」を持っているでしょう。合計で私は正しい答えを得た。

ただし、データ型がテキストであるため、この回避策は "A0_RISE"の場合は実行できません。 SUM関数がなければ、私はここでも出力 "0"を得ました。

どのようにすべての変数の出力を得ることができますか?あなたがダブルスのSUM回避策よりも良いアイデアを持っているなら、私はここでそれについて非常に感謝しています!

+1

一般的なGROUP BYルールは次のように言います。GROUP BY句が指定されている場合、SELECTリストの各列参照は、グループ化列を特定するか、または集合関数の引数でなければなりません! – jarlh

+0

実際には非常に醜い解決策ではありませんが、SUMの代わりにMAXを使用することができます。返す値は常に1つだけです – Johan

+1

予期した結果のサンプルデータを投稿してください – Madhivanan

答えて

0

はたぶんマックスを使用group by var1,var2

SELECT var1, var2, 
     SUM(CASE WHEN var3 ='2008' AND var4='A1_U18' THEN CAST(var5 AS UNSIGNED) ELSE 0 END) AS 'A1_U18_7', 
     SUM(CASE WHEN var3='2015' AND var4='A1_U18' THEN CAST(var5 AS UNSIGNED) ELSE 0 END) AS 'A34_U15_0', 
     CASE WHEN var3 = '2015' AND var4 = 'A0_RISE' THEN CAST(var5 AS UNSIGNED) ELSE 0 END AS 'A0_RISE' 
FROM dataset1 
GROUP BY var1,var2 
1

等により、このような​​を整数とグループ内のVAR2を追加するVAR5をキャスト?

SELECT var1, var2, 
     SUM(CASE WHEN var3 ='2008' AND var4='A1_U18' THEN var5 ELSE 0 END) AS 'A1_U18_7', 
     SUM(CASE WHEN var3='2015' AND var4='A1_U18' THEN var5 ELSE 0 END) AS 'A34_U15_0', 
     MAX(CASE WHEN var3 = '2015' AND var4 = 'A0_RISE' THEN var5 ELSE '' END) AS 'A0_RISE' 
FROM dataset1 
GROUP BY var1 
0

おそらくgroup_concat()

SELECT var1, 
     SUM(CASE WHEN var3 ='2008' AND var4='A1_U18' THEN var5 ELSE 0 END) AS A1_U18_7, 
     SUM(CASE WHEN var3='2015' AND var4='A1_U18' THEN var5 ELSE 0 END) AS A34_U15_0, 
     GROUP_CONCAT(CASE WHEN var3 = '2015' AND var4 = 'A0_RISE' THEN var5 END) AS A0_RISE 
FROM dataset1 
GROUP BY var1; 

あなたもGROUP BYでそれを含めない限り、SELECTvar2を含めないでください。

関連する問題