2016-07-27 3 views
0

私はSQLに慣れていないので、GROUP BY文を理解しようとしています。'text'データ型の配列をフィルタリングするSQL 'GROUP BY'

私はSQLで次のデータを挿入した:

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'); 

私は「完全」タイプを持っていないこれらのIDを選択します。この例では、ID1,4を取得する必要があります。

複数のGROUP BY - HAVING組み合わせを試しました。私の最善のアプローチは:

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

ですが、結果のIDは4,3,2です。

誰でも私が間違っていることについてのヒントを教えてもらえますか?

+0

どのDBMSを使用していますか? –

+0

私はオンラインのSQLインタプリタを使用しています。 https://kripken.github.io/sql.js/GUI/ –

答えて

0

あなたは近くにいます。 having句は、集計関数を必要とし、あなたがidで集計する必要があります。

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

通常は、何かがidを呼び出している場合は、あなたもそのように主キーを持つテーブルを持っているでしょう。その場合は、次のようにすることもできます。

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

偉大な答え!作品と私はGROUP BYで私の間違いを参照してください。 –