我想在SQLite中执行group-concat仅针对那些连接多行的记录。看起来你可以事先做到这一点(在继续使用group_concat之前,先使用组计数记录然后删除这些单行); after(完成group_concat然后删除没有连接的行);甚至可能在?
期间我的问题:SQLite实现这一目标的最快方式是什么?
我在Python中使用APSW制作了一个“后”示例,但对此并不满意:
#set up a table with data
c.execute("create table foo(x,y)")
def getvals():
a = [1, 1, 2, 3, 3]
b = ['a','b','c','d','e']
for i in range(5):
yield a[i],b[i]
c.executemany("insert into foo values(?,?)",getvals())
c.execute('''create table fooc(a,b);
insert into fooc(a,b) select x, group_concat(y) from foo group by x''')
c.execute('select * from fooc')
c.fetchall() ## reports three records
c.execute("select * from fooc where b like '%,%'")
c.fetchall() ## reports two records .. what I want
使用LIKE来满足这种需求似乎很疯狂(而且很慢?)。
答案 0 :(得分:1)
在查询中添加HAVING
子句:
INSERT INTO fooc(a,b)
SELECT x, group_concat(y)
FROM foo
GROUP BY x
HAVING COUNT(*) > 1