2017-08-10 1 views
0

(mit Oracle SQLDeveloper) Ich muss eine SQL-Anweisung generieren, die die eindeutige Anzahl der Farben findet, wo die Form ein Quadrat, aber nie ein Kreis ist.SQL Select distinct COL1, wobei COL2 _ ist und COL2 NIE _?

Die unten stehende Tabelle betitelt: MyObjects

Derzeit meine SQL-Anweisung (die unvollständige ist), ist dies:

SELECT DISTINCT COLOR, SHAPE FROM MYOBJECTS WHERE ((SHAPE = 'square') AND (..........)); 

enter image description here

FYI die Antwort sein sollte:

FARBE | SHAPE
gelb | Quadrat
braun | Quadrat

Kann jemand helfen ??

Antwort

2

Hmmm. . . Eine Methode besteht aus zwei Aggregationsebenen. Eine andere Möglichkeit wäre Subqueries verwendet werden:

SELECT COUNT(DISTINCT COLOR) 
FROM MYOBJECTS o 
WHERE SHAPE = 'square' AND 
     NOT EXISTS (SELECT 1 
        FROM MYOBJECTS o2 
        WHERE o2.color = o.color AND o2.SHAPE = 'circle' 
       ); 

EDIT:

Oh, ich merke, dass Sie die einzelnen Zeilen wollen, nicht die Zählung:

SELECT DISTINCT COLOR, SHAPE 
FROM MYOBJECTS o 
WHERE SHAPE = 'square' AND 
     NOT EXISTS (SELECT 1 
        FROM MYOBJECTS o2 
        WHERE o2.color = o.color AND o2.SHAPE = 'circle' 
       ); 
0

Ich glaube, Sie gerade GROUP BY

SELECT COLOR, SHAPE 
FROM MYOBJECTS 
WHERE SHAPE = 'square' 
GROUP BY COLOR 
brauchen
1

Die andere group by Antwort ist falsch, aber geistige Übung für das, was es wäre ake, es zu tun mit Gruppe durch ...

SELECT color FROM MYOBJECTS GROUP BY color HAVING SUM(shape = 'square') > 0 AND SUM(shape = 'circle') = 0

Verwandte Themen