2015-07-22 1 views
5

Я немного новичок в SQL; У меня есть одна таблица, продукты:SQL: выберите два столбца по одному столбцу в группе с условием только

maker model type 
A  1232 PC 
A  1233 PC 
A  1276 Printer 
A  1298 Laptop 
A  1401 Printer 
A  1408 Printer 
A  1752 Laptop 
B  1121 PC 
B  1750 Laptop 
C  1321 Laptop 
D  1288 Printer 
D  1433 Printer 
E  1260 PC 
E  1434 Printer 
E  2112 PC 
E  2113 PC 

нужно выбрать Maker тип по мейкера, который имеет более чем 1 модель, но все те модели одного типа. Таким образом, выход должен быть

maker type 
D  Printer 

Когда я выполнить группировку только производитель все нормально, но при использовании как производитель и тип = все идет не так :( Это можно выполнить группу по одной колонке, но есть 2 ? в выходе правильный ответ без типа возвращает следующий запрос:

Select maker from product 
group by maker 
having count(model)>1 
and count(distinct type)=1 

Но когда я выбираю производителя, тип - это пойдет не так :( также неправильно при использовании выбрать производителя, тип и группа по мейкера, тип

Прошло около 4 часов, чтобы решить эту проблему, очень признателен за вашу помощь Заранее благодарим!

ответ

5

Чтобы ответить на вопрос, вы не можете указать столбец в элементе, который не был в группе, если у него нет какой-либо аналитики. Вы должны использовать аналитику, чтобы сообщить Oracle, как обрабатывать несколько строк.

Учитывая, что у вас есть только один тип, простой макс будет в безопасности.

SELECT maker, MAX(TYPE) AS type 
    FROM product 
GROUP BY maker 
HAVING COUNT(MODEL) > 1 AND COUNT(DISTINCT TYPE) = 1 
+0

спасибо большое, отлично работает) – ashka

0

Вы ищете это:

SELECT MAKER, TYPE, COUNT(*) AS NUMBER_OF_MODELS 
FROM PRODUCT 
GROUP BY MAKER, TYPE 
HAVING COUNT(*) > 1 
Смежные вопросы