2011-10-12 34 views
1
INSERT INTO tablex(Id, Name, Team, Joined) VALUES 

(1, 'Mr. A', 'X', '2011-02-22'), 

(2, 'Mr. B', 'Y', '2011-02-11'), 

(3, 'Ms. C', 'X', '2011-02-10'), 

(4, 'Mr. D', 'Y', '2011-01-12'), 

(5, 'Ms. E', 'X', '2011-01-06'), 

(6, 'Mr. F', 'Y', '2011-05-02'); 

(7, 'Mr. H', 'X', '2011-02-01'); 

輸出爲:總和組列的數量MySQL的需要

Month | Team | TotalMembers | Percentage 

01/2011 | X | 1   | 50 

01/2011 | Y | 1   | 50 

02/2011 | X | 2   | 75 

02/2011 | Y | 1   | 25 

05/2011 | X | 0   | 0 

05/2011 | Y | 1   | 100 

請幫我做以上。 MySQL(GROUP BY Team,DATE_FORMAT(已加入,'%m /%Y'))主要受歡迎。但可以使用PHP。

在此先感謝

+1

鈣你解釋百分比列? 如果是這樣,我認爲是這樣,一個團隊成員加入到所有加入該月份的成員的比例,然後第3行和第4行是不正確的,應該保持66.6和33.3? – Relja

+0

5/11隊伍X有0記錄嗎?如果你有另外一支球隊,說Z隊是不是會在輸出中出現很多0記錄? – mellamokb

回答

2

可以有更優雅的解決方案,但這個應該工作:

SELECT DATE_FORMAT(Joined, '%m/%Y') AS 
    MONTH , team, (
    count(id)/(
    SELECT count(*) 
    FROM tablex 
    WHERE DATE_FORMAT(Joined, '%m/%Y') = DATE_FORMAT(tx.Joined, '%m/%Y') 
    GROUP BY DATE_FORMAT(Joined, '%m/%Y')) *100 
    ) AS percentage 
    FROM `tablex` AS tx 
    GROUP BY DATE_FORMAT(Joined, '%m/%Y') , team 
+1

+1優秀的答案!但是一個小問題 - 它不包括X的5/11記錄,其中有0個團隊成員:http://sqlize.com/164lD5bwbw – mellamokb

+1

但是如果你在06/11有一個團隊Z,你會得到X和Y有很多0的記錄?如果你想這樣做,你正在尋找一個完全不同的解決方案。首先檢索所有可能的團隊,然後查詢所有月份的數據庫。然後爲每個月計算總成員和百分比,併爲不存在的團隊添加0。你可以在一個查詢中做到這一點,但性能將是一個災難 – Nin

+1

我同意你的看法。我只是注意到你的解決方案和OP發佈的「所需輸出」之間的差異。我會把這個問題帶到OP。 – mellamokb