2013-05-01 61 views
2

我看過這個問題,並在這裏和其他地方回答,並且仍然無法獲得我想要的結果。所以,請原諒重複。計算兩欄並顯示符合條件的總數

我想返回一張表格,顯示一個玩家(兩列玩家)贏得一場遊戲(列名爲其中有1的地方)的次數。

我的查詢是:

SELECT `player1` as Winner, Count(*) AS Count 
FROM scores 
WHERE `place` =1 
UNION ALL 
SELECT `player2` as Winner, Count(*) AS Count 
FROM scores 
WHERE `place` =1 
ORDER BY count DESC 

表結構是:

player1 varchar 
player2 varchar 
place smallint 
Other unrelated columns 

我想,看起來像這樣的迴應:

Winner  Count 
Joe   5 
Sam   4 
Bill   3 

列標籤並不重要對我來說,因爲我會抓住結果並將其放在網頁上。

phpadmin在我的查詢中報告錯誤,而Instant SQLformatter(http://www.dpriver.com/pp/sqlformat.htm?ref=g_wangz)似乎表示查詢正常(格式查詢而不是顯示錯誤)。

那麼,我做錯了什麼?

+0

那麼,如果'scores'中的記錄是'('Joe','Sam',1)',誰贏了? – eggyal 2013-05-01 11:49:37

+0

你的專欄是什麼意思?是否如果theres是一個明確的贏家,player2是空的,並且如果有一個領帶player2不是null?或者是* *可以爲空?我從來沒有見過像這樣的焦油 - 我根本聽不懂。請賜教我們(我們) – Bohemian 2013-05-01 12:15:33

+0

桌子上有關於重複橋牌遊戲的信息(精彩的比賽幾乎和編程一樣有趣!)。該遊戲以雙人遊戲的形式出現,桌上有一對成對的列,然後爲成對的每個玩家分隔列。該查詢將顯示哪些個人玩家在所有報告的遊戲中獲勝最多。玩家有時會與不同的伴侶玩。在我的例子中,也許喬和比爾一起打了3次,而山姆已經和另外4個人一起打了一場比賽,這些人將會進一步走下去。 – Bill 2013-05-01 12:38:34

回答

0

我會稍微改變查詢以下。此查詢您的player1player2列轉換爲具有多行一列,那麼你可以申請計數:

select Winner, 
    count(*) Total 
from 
(
    SELECT `player1` as Winner 
    FROM scores 
    WHERE `place` =1 
    UNION ALL 
    SELECT `player2` as Winner 
    FROM scores 
    WHERE `place` =1 
) src 
group by winner 
order by total desc; 

SQL Fiddle with Demo

+0

謝謝。完美地工作(一旦我按順序包含了DESC)。 – Bill 2013-05-01 12:12:50

+0

@Bill Yup,我錯過了。 :) – Taryn 2013-05-01 12:21:21

+0

我沒有足夠的聲望點投票答案,但我確信如果我做到了! – Bill 2013-05-01 12:39:44

0

你可以做一個簡單的UNION ALL並計算在使用GROUP BY結果參賽者姓名;

SELECT Name AS Winner, COUNT(Name) AS Count 
FROM (
    SELECT player1 AS Name FROM Scores WHERE place=1 
    UNION ALL 
    SELECT player2 AS Name FROM Scores WHERE place=1 
) a 
GROUP BY Name 
ORDER BY Count DESC; 

An SQLFiddle to test with

+0

謝謝,這個作品完美,你包括一個小提琴。 – Bill 2013-05-01 12:11:05

+0

我沒有足夠的聲望點來回答問題,但我確信如果我做了! – Bill 2013-05-01 12:40:10

+0

@Bill通過在任一答案處選中透明覆選框,您可以將您的問題標記爲已回答。如果兩個答案同樣有幫助,bluefeet幾秒鐘快,所以我會標記他的:) – 2013-05-01 12:43:20