2017-04-20 16 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
  • IF status = 0私にポイント(この場合は15)を得てください
  • status = 1は私に(この場合は5)ポイント
  • あなたは集計関数を使用している場合status = 0は私に
+2

質問を編集し、サンプルデータと希望する結果を提供してください。 –

+0

@GordonLinoffこれは良いですか? – Bill

答えて

1

を(この場合はText here)コメントを取得する場合は、すべての列が集計されなければならないを取得する場合。

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 ; 

コメント:

  • これは、複数の行が条件に合致するとstatus = 0を有する場合にはGROUP_CONCAT()を使用して、前者が標準SQLであるので、私はIF()CASEを好みます。
  • 「ポイント」列の名前は、比較されるステータスと一致します。
+0

コメントの条件に一致する行が1つしかない場合は、GROUP_CONCATの代わりに何を使用しますか? – Bill

+0

@Bill。 。 。 'MAX()'や 'MIN()'を使うことができます。 –

関連する問題