2014-01-24 52 views
1

我要試着解釋我的問題。我有一個問題想要如何命名它,所以我希望你會從描述中得到它。從表中選擇多個數據的計數

我有1張桌子。有3個重要欄目,打擾其他欄目並不重要。 人誰投贊成票,誰的人得到了表決,評級

我需要得到3個結果(計數)。

1)我需要誰給我1評級所有人的計數,但我沒有投票給他們還是我給他們評級0

2)所有的人whem我給等級1的數但他們沒有投票給我或者他們給我的等級0

3)給了我的評價人的數量,我給他們也排行榜1.

謝謝你的幫助。

+0

tttpapi,3人計),是它,你兩者都給了對方評分1? – OGHaza

回答

3

爲了簡單起見,我假設你不需要在一個查詢中做到這一點。如果你這樣做,那麼你將不得不將它們合併爲子查詢。相反,稍微複雜一點,我認爲你可能想要一次爲所有用戶提取這些統計數據。

我寫這些查詢的模式

Voter (VoterID, Name) 
Rating (VoterID, VotedOnID, Rating) 

我測試了他們SQLFiddle


1)我需要誰給我1評級所有人的計數但我沒有投票給他們還是我給他們評級0

SELECT v.Name, COUNT(s.VoterID) AS "They vote 1, you vote 0 or null" 
FROM Voter v 
LEFT JOIN (
    SELECT a.VoterID, a.VotedOnID 
    FROM Rating a 
    LEFT JOIN Rating b ON a.VotedOnID = b.VoterID 
        AND b.VotedOnID = a.VoterID 
    WHERE a.Rating = 1 
    AND (b.Rating IS NULL OR b.Rating = 0) 
) s ON v.VoterID = s.VotedOnID 
GROUP BY v.VoterID, v.Name; 

2)所有的人whem我給的評價1,但他們沒有投票給我或者他們給我的等級0

SELECT v.Name, COUNT(s.VoterID) AS "You vote 1, they vote 0 or null" 
FROM Voter v 
LEFT JOIN (
    SELECT a.VoterID, a.VotedOnID 
    FROM Rating a 
    LEFT JOIN Rating b ON a.VotedOnID = b.VoterID 
        AND b.VotedOnID = a.VoterID 
    WHERE a.Rating = 1 
    AND (b.Rating IS NULL OR b.Rating = 0) 
) s ON v.VoterID = s.VoterID 
GROUP BY v.VoterID, v.Name; 

注:的計數除了最終的ON條件外,這與上述查詢完全相同。


3)給我的等級[1],我給他們也排行榜1.

SELECT v.Name, COUNT(b.VotedOnID) AS "You both vote 1" 
FROM Voter v 
LEFT JOIN Rating a ON a.VoterID = v.VoterID 
        AND a.Rating = 1 
LEFT JOIN Rating b ON a.VotedOnID = b.VoterID 
        AND b.VotedOnID = a.VoterID 
        AND b.Rating = 1 
GROUP BY v.Name; 
+0

我在這裏發現了一個小問題。我需要從3中分開1和2.我不能在(1 OR 2)和3中有相同的記錄。我測試了第一個,它也給出了3的結果(當兩者都給出1時)。 – tttpapi

+1

對不起,使用固定查詢和新SQLFiddle更新了答案 – OGHaza

+1

現在它工作正常!非常感謝! – tttpapi

-4
SELECT Count(Table1.Field), Count(Table2.Field), Count(Table3.Field) 
FROM Table1,Table2, Table3 
+3

這遠沒有答案。解釋爲什麼? – datelligence

+0

即使編輯它仍然有相同的效果,它根本沒有幫助 – tttpapi

+0

編輯只是格式,認爲你可以放心地忽略這個答案。 – OGHaza