Вложенный выбор Oracle sqlplus не работает

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

Я пытался какое-то время, и это лучшее, что я мог придумать, хотя он не работает

SELECT SuppName, SuppCode, Postcode
FROM Suppliers 
WHERE Suppliers.SuppCode = (
SELECT SuppCode
FROM Stocks 
WHERE Suppliers.SuppCode = Stocks.SuppCode
GROUP BY SuppCode
HAVING MIN(Price) > AVG(Price)
);

Если бы кто-нибудь мог дать мне подсказку в правильном направлении, где я ошибаюсь, я был бы признателен.

   create table Stocks
  (StockNo      number(6) not null primary key,
   StoreCode    varchar2(6) not null, 
   Description  varchar2(24),
   Quantity     number(6),
   Units        varchar2(12),
   Reorder      number(6),
   foreign key (StoreCode)
     references Stores(StoreCode));

   create table Suppliers
  (SuppCode  varchar2(4) not null primary key,
   SuppName  varchar2(30),
   Street    varchar2(24),
   Town      varchar2(16),
   County    varchar2(16),
   PostCode  varchar2(10),
   TelNo     varchar2(16),
   FaxNo     varchar2(16))
  cluster SupplyData(SuppCode);

person cmorga1    schedule 30.11.2016    source источник


Ответы (1)


Чтобы получить коды для этих расходных материалов, я бы пошел на агрегацию. Кажется, вы хотите:

SELECT s.SuppCode
FROM Stocks s
GROUP BY s.SuppCode
HAVING MIN(s.Price) > (SELECT AVG(s2.Price) FROM Stocks s2);
person Gordon Linoff    schedule 30.11.2016
comment
Спасибо за ваш ответ, у меня это было однажды, но тогда я также боролся с получением имени поставщика и почтового индекса, потому что я не могу группировать при использовании двух таблиц. Я пробовал использовать его в качестве подзапроса, но он возвращает несколько строк, поэтому я был немного в тупике и в конечном итоге попробовал другие решения. Извините, я все еще нахожусь на кривой обучения с Oracle, я упустил что-то очевидное? - person cmorga1; 30.11.2016
comment
@ cmorga1. . . Вы можете получить имя поставщика, используя явный оператор JOIN или IN. - person Gordon Linoff; 30.11.2016