2015-07-22 27 views
5

Sono un po 'nuovo per SQL; Ho una singola tabella Prodotti:SQL: selezionare due colonne per singola colonna in gruppo con solo la condizione

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 

Ho bisogno di selezionare un tipo di produttore per produttore che ha più di 1 modello, ma tutti coloro modello sono di un solo tipo. Quindi l'uscita dovrebbe essere

maker type 
D  Printer 

Quando si esegue il raggruppamento solo dal creatore di tutto è ok, ma quando l'uso sia per il caffè e il tipo = tutto va male :( è che possibile eseguire gruppo da una singola colonna, ma hanno 2 ? in uscita La risposta corretta senza un tipo restituisce query successiva:

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

Ma quando seleziono il caffè, tipo - va male :( anche sbagliato quando l'uso di selezione per il caffè, il tipo e il gruppo dal produttore, tipo

Passato circa 4 ore per risolvere questo, apprezzeremo molto il tuo aiuto Grazie in anticipo!

risposta

5

Per rispondere alla domanda, non è possibile includere una colonna nella selezione che non era nel raggruppamento a meno che non abbia una sorta di analitica. Devi usare l'analitica per dire a Oracle come gestire più righe.

Dato che si è certi di avere un solo tipo, un max semplice sarebbe sicuro.

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

Grazie mille, funziona perfettamente) – ashka

0

Siete alla ricerca di questo:

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