Получить все значения из столбцов с дубликатами

У меня есть SQL-запрос к таблице резервирования (атрибуты: имя, день, начало, конец), который находит повторяющиеся значения для атрибута дней:

SELECT day, COUNT(day) as NumberOfTimes 
FROM reservation group by day HAVING (COUNT(day)>1) 
ORDER BY NumberOfTimes

Но он возвращает только день, а количество раз в этот день указано в таблице бронирований. Я пытаюсь получить в ответе список всех имен, перечисленных за этот день, но у меня возникают проблемы с группировкой запроса. Как мне подойти к этому, я хочу, чтобы возврат выглядел так:

BOB   MONDAY  3
JOHN  MONDAY  3
STEVE MONDAY  3
ALICE WEDNESDAY 2
MARTIN WEDNESDAY 2

Спасибо за ваше время!


person ECE    schedule 06.02.2013    source источник
comment
Верно ли, что в желаемом результате Боб сделал 3 бронирования в понедельник?   -  person grahamj42    schedule 06.02.2013


Ответы (2)


Вы не можете добавить столбец для имени

SELECT
  name,
  day,
  COUNT(day) as NumberOfTimes
FROM reservation
group by name , day
HAVING (COUNT(day) > 1)
ORDER BY NumberOfTimes
person Muhammad Raheel    schedule 06.02.2013

Вы можете использовать подзапрос, который позволит вам добавить больше столбцов, не входящих в GROUP BY:

select r1.name,
    r2.day,
    r2.NumberOfTimes
from reservation r1
inner join
(
    SELECT day, COUNT(day) as NumberOfTimes 
    FROM reservation 
    group by day 
    HAVING (COUNT(day)>1) 
) r2
    on r1.day = r2.day
order by NumberOfTimes 

Если вам нужно только имя в качестве дополнительного столбца, вы можете использовать:

SELECT name, day, COUNT(day) as NumberOfTimes 
FROM reservation 
group by day, name
HAVING (COUNT(day)>1) 
order by NumberOfTimes 
person Taryn    schedule 06.02.2013
comment
@raheelshan Я показываю альтернативный путь. Если, например, они хотят добавить в запрос больше столбцов, то простая группировка по имени не вернет правильные значения для других столбцов. Вам придется использовать подзапрос - person Taryn; 07.02.2013