2014-01-18 55 views
0

我正在努力使下面的這個查詢對另一個具有用戶名的表中的行進行計數,然後有殺手的死亡。每個用戶名在統計表中有一行,但在用戶名爲pvp表中有多行。由於某些原因,死亡列與殺死列相同,有誰知道爲什麼?這是我的查詢。這裏是一個SQL小提琴,我認爲我這樣做是正確IDK的如何使用sqlfiddle:http://sqlfiddle.com/#!2/b793b/1MySQL LEFT JOIN查詢顯示相同的值

SELECT 
    *, 
    COUNT(pvptable.killer) as kills, 
    COUNT(pvptable.username) as deaths, 
    ROUND(COUNT(pvptable.killer)/COUNT(pvptable.username), 2) as kd 
FROM 
    stats as st 
    LEFT JOIN pvp as pvptable ON pvptable.killer=st.username 
WHERE 
    st.username="Username"; 
+0

難道你一些樣本數據和預期的結果添加到您的問題,也使sqlfiddle。我無法弄清楚你想要計算什麼,因爲你沒有清楚地顯示你的模式。 – Barmar

+1

請張貼您的表格結構。這聽起來像你可能需要_two_加入反對同一張桌子,一個殺害和一個死亡。 –

+0

是的,但我不知道如何去做。 – user3205106

回答

1
SELECT st.*, 
     SUM(pvp.killer = st.username) AS kills, 
     SUM(pvp.username = st.username) as deaths 
FROM stats AS st 
LEFT JOIN pvp ON pvp.username = st.username OR pvp.killer = st.username 
WHERE st.username = "Username" 

DEMO

爲大家做的,用GROUP BY

SELECT st.*, 
     SUM(pvp.killer = st.username) AS kills, 
     SUM(pvp.username = st.username) as deaths 
FROM stats AS st 
LEFT JOIN pvp ON pvp.username = st.username OR pvp.killer = st.username 
GROUP BY st.username 

DEMO

+0

謝謝,通過任何機會,你知道如何做到這一點,但它會顯示所有用戶和有PVP /死亡統計數據,而不是搜索1? – user3205106

+0

添加到答案 – Barmar

0

COUNT(foo)COUNT(bar)都算在結果的行數,你不妨說,在這兩種情況下COUNT(*)。例如,您需要COUNT(*) FROM ... GROUP BY killer以獲得殺手的數量。不知道表結構是什麼給你一個完整的答案。

+0

可能最好等到他在發佈答案之前發佈更多詳細信息。 – Barmar

+0

如果'foo'具有'NULL'值,'COUNT(foo)'和'COUNT(*)'將會不同。 –