C:\Users\pengsir>sqlite3 e:\\test.db
sqlite> create table test (f1 TEXT,f2 TEXT, f3 TEXT);
sqlite> insert into test values("x1","y1","w1");
sqlite> insert into test values("x1","y1","w2");
sqlite> insert into test values("x1","y3","w2");
sqlite> insert into test values("x2","y3","w2");
sqlite> insert into test values("x3","y4","w4");
sqlite> insert into test values("x2","y3","w4");
sqlite> insert into test values("x1","y3","w2");
select f1,f2 from test where count(f2)>1 group by f1,f2;
我收到错误消息:Error: misuse of aggregate:
,我想获得f1和f2组合,其中f1的值相同,两个或多个相同的f2值被选中,也就是说,我想要选择
x1|y1
x1|y3
x2|y3
我可以通过两个sqlite命令来做到这一点:
sqlite> create table tmp1 as
...> select f1,f2,count(f2) as v from test group by f1,f2;
sqlite> select f1,f2 from tmp1 where v>1 ;
如何简化我的sqlite命令?
答案 0 :(得分:2)
WHERE子句在GROUP BY聚合之前过滤行,因此count(f2)
值尚不可用。
要在聚合后过滤行,请使用HAVING子句:
SELECT f1, f2
FROM test
GROUP BY f1, f2
HAVING count(f2) > 1