2017-04-20 135 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()'。 –