2012-08-22 36 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不是使用的標籤,我會使用一個通用的案例。 –

相關問題