2017-02-15 38 views
0

我想用不同的數據類型在多個變量上查詢數據庫。有多個條件的MySQL查詢沒有WHERE

我的查詢是這樣的:

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 

其實我也不需要總結前兩個查詢的結果,但否則我會得到一個「0」的輸出。用這筆錢我得到了正確的答案。

但是,在「A0_RISE」的情況下,此解決方法無法實現,因爲數據類型是文本。沒有SUM函數,我在這裏得到了輸出「0」。

我怎樣才能得到所有變量的輸出權?如果你有一個比SUM更好的辦法,那麼我會非常感激這裏的!

+1

一般的GROUP BY規則說:如果指定了GROUP BY子句,SELECT列表中的每個列引用必須標識一個分組列或者是一個set函數的參數! – jarlh

+0

不是一個好的解決方案,實際上非常醜陋,但是您可以使用MAX而不是SUM,以防總是隻有1個值返回 – Johan

+1

發佈一些帶有預期結果的示例數據 – Madhivanan

回答

0

VAR5整數這樣​​和組通過添加VAR2像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

也許用最大?

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; 

不包括var2SELECT,除非你還包括它在GROUP BY