group_concat仅当多于一组时才有

时间:2011-09-29 17:50:37

标签: python sqlite

我想在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来满足这种需求似乎很疯狂(而且很慢?)。

1 个答案:

答案 0 :(得分:1)

在查询中添加HAVING子句:

INSERT INTO fooc(a,b) 
     SELECT x, group_concat(y) 
       FROM foo 
   GROUP BY x
     HAVING COUNT(*) > 1