SQL'GROUP BY'过滤'text'数据类型的数组

时间:2016-07-27 10:47:47

标签: sql group-by

我是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。对于这个例子,我应该得到ID 1,4。

我尝试了多个GROUP BY - HAVING组合。我最好的方法是:

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

但结果ID为4,3,2。

有人能给我一个关于我做错的提示吗?

1 个答案:

答案 0 :(得分: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
                 );