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

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

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

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

2 ответа

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

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

Вы можете использовать подзапрос, который позволит вам добавить больше столбцов, которые не включены в 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 
Другие вопросы по тегам