Oracle Group Подмножество столбцов выбора - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть столбец с именем vs_tblRentals, в котором есть следующие столбцы:

RENTALID    CUSTOMERID    BOXID    RENTALDATE       RETURNDATE

А также столбец с именем vs_tblBoxes, в котором есть следующие столбцы

BOXID       MOVIEID       MEDIUMTYPECODE       DATEBOXRECEIVED

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

SELECT COUNT(vs_tblRentals.BoxID) AS RentalCount
FROM vs_tblRentals
LEFT JOIN vs_tblBoxes B ON vs_tblRentals.BoxID = B.BoxID
GROUP BY vs_tblRentals.BoxID;

Однако я также хочу отображать информацию рядом с RentalCount, которая НЕ является частью группы - в идеале мой вывод будет выглядеть примерно так:

BoxID    MovieID   MediumTypeCode   RentalCount 

Я также хотел бы отобразить все записи в vs_tblRentals для боксов, которые были арендованы более 5 раз.

Как это должно быть сделано в Oracle 12c?

РЕДАКТИРОВАТЬ:

Следующий код успешно получает арендный счет для каждого BoxID:

SELECT COUNT(vs_tblRentals.BoxID) AS RentalCount, vs_tblRentals.BoxID
FROM vs_tblRentals
LEFT JOIN vs_tblBoxes B ON vs_tblRentals.BoxID = B.BoxID
GROUP BY vs_tblRentals.BoxID;

и выводит следующее:

RENTALCOUNT BOXID
1           337
1           691
1           43
4           321
4           123
4           665
4           674

НоЯ не могу заставить это работать при отображении другой информации о BoxID вместе с этим.

Пример данных из vs_tblBoxes:

BOXID   MOVIEID  MEDIUMTYPECODE     DATEBOXRECEIVED 
257     702      BD                 22-Nov-1953 
258     708      VHS                16-Jul-1988 
259     708      DVD                16-Jul-1988 

Пример данных из vs_tblRentals

RENTALID    CUSTOMERID  BOXID   RENTALDATE    RETURNDATE    
1           1           257     06-Apr-2018   22-Apr-2018   
2           1           257     22-Mar-2018   NULL
3           1           259     26-Feb-2018   16-Mar-2018

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Вместо левого соединения используйте правое внешнее соединение, чтобы сделать это ..

select b.boxId, count(*) as RentalCount from 
vs_tblRentals r right outer join vs_tblBoxes b
on b.boxId = r.boxId group by b.boxId;
0 голосов
/ 12 декабря 2018

Вероятно, вам нужно присоединиться к таблицам в обратном порядке (сделать записи в vs_tblRentals необязательными, а не наоборот), добавить дополнительные столбцы в select и GROUP BY их тоже.

SELECT B.BoxID, B.MovieID, B.DateBoxReceived, COUNT(R.BoxID) AS RentalCount
FROM vs_tblBoxes B 
LEFT JOIN vs_tblRentals R
  ON R.BoxID = B.BoxID
GROUP BY B.BoxID, B.MovieID, B.DateBoxReceived;

Использование GROUP BY в Oracle (в отличие, например, от MySQL) требует, чтобы вы указали свой запрос более полно и либо группу в каждом столбце, который вы хотите извлечь, либо сгенерируйте его с помощью агрегатной функции (например, MAX или *).1007 *)

Если ни то, ни другое не выдаст ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...