我是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。
有人能给我一个关于我做错的提示吗?
答案 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
);