2012-01-21 2 views
1

Учитывая таблицу с наградами, полученными членами организации, я пытаюсь перечислить всех членов, которые получили три или более награды после определенной даты, и перечислить все награды, полученные этими членами. У меня есть запрос, который будет правильно перечислять члены, но он показывает только одну строку для каждого члена, и я пытаюсь увидеть все их награды.mysql - выбрать группы строк по счету?

Для каждой награды («Премия»), полученной любым членом, имеется одна строка в таблице, с типом премии и датой ее получения («Награда»).

Вот что у меня есть:

SELECT Membername, Award, Awarddate,COUNT(Membername) 
FROM awards 
WHERE Awarddate > '2011-06-30' 
GROUP BY Membername HAVING COUNT(Membername) > 2 

предложения?

+0

Что уникальный идентификатор для вашей таблицы? это комбинация имени участника, награды и награды? или есть отдельный идентификатор? – xQbert

ответ

1

Вы можете использовать GROUP_CONCAT() агрегатную функцию:

SELECT Membername 
    , COUNT(*)         AS NumberOfAwards 
    , GROUP_CONCAT(Award ORDER BY Awarddate)  AS Awards 
    , GROUP_CONCAT(Awarddate ORDER BY Awarddate) AS AwardDates 
FROM awards 
WHERE Awarddate > '2011-06-30' 
GROUP BY Membername 
HAVING COUNT(*) > 2 
+0

Очень приятно, и показывает все награды на одной линии. Но предположим, что я хотел сохранить формат «одна награда за строку», чтобы пользователи могли видеть дату каждой награды. Как это будет выглядеть? –

+0

Если вы хотите, чтобы они были в одной строке за награду, вы можете использовать ответ @ piotrm. –

1
SELECT a.Membername, a.Award, a.Awarddate, Awardcount.Awards 
FROM awards a 
JOIN 
    (SELECT Membername, COUNT(*) AS Awards 
    FROM awards 
    WHERE Awarddate > '2011-06-30' 
    GROUP BY Membername 
    HAVING Awards > 2) Awardcount 
ON a.Membername = Awardcount.Membername 

Edit: перечислить только награды, заработанные после указанной даты добавить еще одну строку в этом запросе, как предложено ypercube:

WHERE a.Awarddate > '2011-06-30' 
+1

Я думаю, вам также понадобится 'WHERE a.Awarddate> '2011-06-30'' во внешнем запросе. –

+0

Я запустил этот запрос, и он работает, за исключением того, что предложение WHERE не работает - оно показывает все награды, в том числе ранее 2011-06-30. Что может быть причиной этого? К сожалению, только что увидели ответ ypercube - это так. Замечательно, спасибо! –

+0

Спасибо, ребята, это было именно то, что мне нужно! –

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