group_concat только когда больше чем один, чтобы сгруппировать - PullRequest
1 голос
/ 29 сентября 2011

Я хотел бы выполнить групповой конкатат в SQLite только для тех записей, в которых имеется более одной строки для объединения. Кажется, что вы могли бы сделать это заранее (посчитайте записи, используя группу, затем удалите эти одиночные строки, прежде чем продолжить с group_concat); после (завершите group_concat, затем удалите строки, где ничего не было объединено); или возможно даже во время?

Мой вопрос: какой самый быстрый способ для SQLite это сделать?

Я разработал пример «после» с использованием APSW в Python, но не доволен им:

#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 Ответ

1 голос
/ 29 сентября 2011

Добавьте предложение HAVING к вашему запросу:

INSERT INTO fooc(a,b) 
     SELECT x, group_concat(y) 
       FROM foo 
   GROUP BY x
     HAVING COUNT(*) > 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...