Как эффективно использовать Oracle JOIN с GROUP BY, чтобы я мог выбрать несколько столбцов из обеих таблиц и применить функцию агрегирования - PullRequest
1 голос
/ 11 мая 2019

У меня есть схема базы данных как -

create table Manufacturer (mid integer primary key, name varchar(20), address varchar(56));

create table Supplies(sid integer references Supplier(sid), pid integer references Product(pid));

У меня есть проблема, которая заявляет-

Перечислите идентификаторы и названия производителей и количество продуктов, произведенных каждым

Итак, я попробовал GROUP BY с JOIN, но не удается, когда я пытаюсь показать mid,name,count(pid) вместе, показывая not a GROUP BY expression error.

Но я успешно выполнил следующее ->

select name,count(m2.pid) from Manufacturer m1 inner join Manufactures m2 on m1.mid=m2.mid group by name;

, который дает мне названия и соответствующее количество продуктов успешно. Но когда я пытаюсь добавить средний столбец, чтобы показать mid вместе с другими двумя - name и count(pid), это показывает ошибку -

select m1.mid,name,count(m2.pid) from Manufacturer m1 inner join Manufactures m2 on m1.mid=m2.mid group by name;

Простое добавление m1.mid приводит к ошибке!

Это также выдает ошибку, когда я пытаюсь GROUP BY mid - критерии присоединения!

select m1.mid,name,count(m2.pid) from Manufacturer m1 inner join Manufactures m2 on m1.mid=m2.mid group by m1.mid;

Это потому, что mid является критерием объединения для двух таблиц? И поэтому я не могу использовать это в разделе GROUP BY? Я не уверен, что это за ошибка или какая концепция мне не хватает! Заранее спасибо за помощь.

1 Ответ

1 голос
/ 11 мая 2019

Это имеет значение:

select 
  count(m2.pid),  --> aggregation
  m1.mid, name    --> columns that aren't aggregated MUST be in the GROUP BY clause
from ...
group by m1.mid, name

Кроме того, я бы предложил использовать псевдонимы таблиц всегда, везде (в столбце name его нет).

...