2015-07-22 43 views
5

Jestem trochę nowy w SQL; Mam jednej tabeli produkty:SQL: Wybierz dwie kolumny za pomocą pojedynczej kolumny w grupie o tylko o stanie

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 

muszę wybrać typ Maker przez animatora, który ma więcej niż 1 model ale wszystkich tych modelach są z jednego rodzaju. Więc wyjście powinno być

maker type 
D  Printer 

Gdy wykonywane tylko przez grupowanie maker wszystko jest ok, ale gdy zastosowanie zarówno ekspres i type = wszystko idzie źle :( Czy jest to możliwe do wykonania przez grupę pojedynczej kolumnie, ale mają 2 ? w wyjściu poprawna odpowiedź bez typu zwraca następny zapytanie:

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

Ale kiedy wybrać ekspres, typ - to idzie źle :( też źle, gdy użycie select ekspres, typ i grupa przez ekspres, typ

Spędziłem około 4 godzin, aby rozwiązać ten problem, bardzo dziękuję za pomoc Z góry dziękuję!

Odpowiedz

5

Aby odpowiedzieć na pytanie, nie można podać kolumny w selekcji, która nie należała do grupy, chyba że ma jakiś rodzaj analizy. Musisz użyć narzędzia analitycznego, aby powiedzieć Oracle, jak obsługiwać wiele wierszy.

Biorąc pod uwagę, że masz zagwarantowany tylko jeden typ, proste maksimum byłoby bezpieczne.

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

Wielkie dzięki, działa idealnie) – ashka

0

Patrzysz na to:

SELECT MAKER, TYPE, COUNT(*) AS NUMBER_OF_MODELS 
FROM PRODUCT 
GROUP BY MAKER, TYPE 
HAVING COUNT(*) > 1