2016-07-27 9 views
0

Ich bin neu in SQL und ich versuche die GROUP BY-Anweisung zu verstehen.SQL 'GROUP BY' zu filtern ein Array von 'Text' Datentyp

Ich habe die folgenden Daten in SQL eingefügt:

CREATE TABLE table(id integer, type text); 

INSERT INTO table VALUES (1,'start'); 
INSERT INTO table VALUES (2,'start'); 
INSERT INTO table VALUES (2,'complete'); 
INSERT INTO table VALUES (3,'complete'); 
INSERT INTO table VALUES (3,'start'); 
INSERT INTO table VALUES (4,'start'); 

ich diese IDs auswählen möchten, die keinen Typ ‚vollständig‘ haben. Für dieses Beispiel sollte ich IDs 1, 4 erhalten.

Ich habe mehrere GROUP BY - HAVING Kombinationen ausprobiert. Mein bester Ansatz ist:

SELECT id from customers group by type having type!='complete'; 

aber die resultierenden IDs sind 4,3,2.

Kann mir jemand einen Hinweis geben, was ich falsch mache?

+0

Welche DBMS verwenden Sie? –

+0

Ich benutze einen Online-SQL-Interpreter. https://kripken.github.io/sql.js/GUI/ –

Antwort

0

Sie sind in der Nähe. Die having Klausel muss eine Funktion Aggregation und Sie müssen von id aggregieren:

select id 
from table t 
group by id 
having sum(case when type = 'complete' then 1 else 0 end) = 0; 

Normalerweise, wenn Sie etwas ein id genannt haben, würden Sie auch mit, dass als Primärschlüssel einer Tabelle haben. Wenn ja, können Sie auch Folgendes tun:

select it.id 
from idtable it 
where not exists (select 1 
        from table t 
        where t.type = 'complete' and it.id = t.id 
       ); 
+1

Große Antwort! Works und ich sehe meinen Fehler in GROUP BY. –