2011-10-12 7 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

Ca вы объяснить столбец в процентах? Если это так, как я полагаю, отношение членов, соединенных в одну команду со всеми членами, присоединилось к этому месяцу, а затем строки 3 и 4 неверны, должны оставаться 66.6 и 33.3? – Relja

+0

Нужно ли иметь 0 записей за 5/11, команда X? Разве это не приведет к появлению большого количества 0 записей на выходе, если у вас есть другая команда, скажем, команда Z? – 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 Отличный ответ! Одна незначительная проблема - в нее не входит запись 5/11 для X, в которой есть 0 членов команды: http://sqlize.com/164lD5bwbw – mellamokb

+1

Но что, если у вас есть команда Z 06/11, вы получите много записей с 0 для X и Y? Если вы этого хотите, вы смотрите на совершенно другое решение. Сначала вы можете получить все возможные команды, а затем запросить db на все месяцы. Затем для каждого месяца вычисляйте общее количество участников и процент и добавьте 0 для несуществующих команд. Возможно, вы могли бы сделать это в одном запросе, но производительность будет катастрофой. – Nin

+1

Я согласен с вами. Я просто отмечаю несоответствие между вашим решением и то, что OP размещено как «требуемый вывод». Я бы взял на себя эту озабоченность с ОП. – mellamokb

Смежные вопросы