2017-04-20 129 views
2

我試圖通過以下查詢來獲取我想要的所有信息。那是status = 0和SUM點數status = 0status = 1哪裏的評論值。以下是我已經得到了到現在爲止(我不能搶在這一點上的評論值)MySQL單個查詢多個結果

SELECT 
    IF(status = 0, comment, NULL) AS com, 
    SUM(IF(status = 0, points, 0)) AS points1, 
    SUM(IF(status = 1, points, 0)) AS points2 
FROM `tablename` 
    WHERE mid = $mid 
    AND stage = 0 

表數據:

+----+--------+--------+-----------+-----+------+ 
| id | mid | points | comment |stage|status| 
+----+--------+--------+-----------+-----+------+ 
| 1 | 500 | 15 | Text here | 0 | 0 | 
| 2 | 500 | 5 | Blablabla | 0 | 1 | 
| 3 | 20  | 7 |   | 1 | 0 | 
| 4 | 356 | 10 | More text | 0 | 2 | 
| 5 | 9  | 0 |   | 1 | 0 | 
| 6 | 52  | 5 | Text etc | 0 | 1 | 
| 7 | 520 | 13 | Texting | 1 | 0 | 
| 8 | 540 | 8 |   | 0 | 0 | 
+----------------------------------------+------+ 

結果我要找:

  • 其中mid = 500stage = 0
  • 如果status = 0得到我的積分(15在這種情況下)
  • IF status = 1讓我(在這種情況下5)點
  • IF status = 0讓我(在這種情況下Text here)評論
+2

編輯您的問題,並提供樣本數據和期望的結果。 –

+0

@GordonLinoff這是更好嗎? – Bill

回答

1

如果您正在使用聚合函數,那麼所有列應合併計算。我喜歡CASEIF(),因爲前者是標準的SQL:

SELECT GROUP_CONCAT(CASE WHEN status = 0 THEN comment END) AS com, 
     SUM(CASE WHEN status = 0 THEN points ELSE 0 END) AS points_0, 
     SUM(CASE WHEN status = 1 THEN points ELSE 0 END) AS points_1 
FROM `tablename` 
WHERE mid = $mid AND stage = 0 ; 

評論:

  • 它使用GROUP_CONCAT()的情況下,多行符合條件並有status = 0
  • 「點」列的名稱與正在比較的狀態相匹配。
+0

如果只有一行符合註釋的條件,我應該用什麼來代替GROUP_CONCAT? – Bill

+0

@Bill。 。 。你可以使用'MAX()'或'MIN()'。 –