2012-08-22 35 views
2

我猜在那里有一个简单的解决方案,但它让我疯狂地试图让它工作。我想在同一张表上执行两个SUM()查询,但它们都有不同的WHERE子句。在同一张桌子上的两个SUM()查询,但使用不同的Where子句

该表格用于用户投票系统,因此用户对其他用户投票内容进行投票。我希望能够列出当前用户的活动(他们添加的内容/类别),并将其与其他用户投票给当前用户内容的详细信息结合起来。

本质上我想结合下面的两个查询从同一个表。

SELECT category_id, 
SUM(content_add) AS content_add_count, 
SUM(category_add) AS category_add_count 
FROM table1 WHERE user_id = '" . $user_id . "' GROUP BY category_id 


SELECT SUM(normal_vote) AS agree_votes 
FROM table1 
WHERE issued_by_user != '" . $user_id . "' 
AND user_id = '" . $user_id . "' 
AND plus = '1' 
GROUP BY category_id 

我试图把在另一个SUM()第二个查询在第一个查询上述但这显然不能在MySQL来完成,但是这就是想什么我实现如果可能的话。

回答

4
SELECT 
    category_id 
    ,SUM(content_add) AS content_add_count 
    ,SUM(category_add) AS category_add_count 
    ,SUM(if(issued_by_user != '" . $user_id . "' AND plus = '1',normal_vote,0)) AS agree_votes 
FROM table1 
WHERE user_id = '" . $user_id . "' 
GROUP BY category_id 
+0

我正要在看到前三个后写这个答案。 –

+0

+1这是我推荐的方式。这里的“技巧”是基于条件测试在SUM中包含一个值,将这些条件测试从WHERE子句移动到SELECT列表中的表达式中。 CASE表达式将成为MySQL特有的IF()函数的更通用的方法。 – spencer7593

+0

我把如果如果是首选的MySQL函数。以一种更随意的方式比一种情况更容易理解。如果mysql不是使用的标签,我会使用一个通用的案例。 –

相关问题