Выберите строки, имеющие list_num , не равный пустой строке.Поскольку сравнение с NULL приводит к UNKNOWN, эти строки также будут отброшены:
SELECT group_num, COUNT(*)
FROM pair_candidates
WHERE list_num != ''
GROUP BY group_num
Но это не даст результатов для group_num , не имеющего строк, соответствующих критериям, поэтому результаты не будутименно то, что вы надеялись.Чтобы подсчитать количество «пустых» групп, вы также можете использовать тот факт, что COUNT(X)
возвращает количество раз, когда X не равно NULL в группе.
SELECT group_num, COUNT(NULLIF(list_num, ''))
FROM pair_candidates
GROUP BY group_num
NULLIF(X, Y)
возвращает свой первый аргумент, если аргументы различны, NULL, если они одинаковы, поэтому COUNT(NULLIF(X, ''))
не считается, если X равно ''
.
. Полный пример:
In [1]: from contextlib import closing
In [2]: import sqlite3
In [3]: conn = sqlite3.connect(':memory:')
In [4]: with closing(conn.cursor()) as cur:
...: cur.execute('create table pair_candidates (group_num, list_num)')
...: cur.executemany('insert into pair_candidates values (?, ?)', [
...: (1, None), (1, 1), (2, 1), (2, 1), (3, ""), (3, None)])
...:
In [5]: with closing(conn.cursor()) as cur:
...: cur.execute('''select group_num, count(nullif(list_num, ''))
...: from pair_candidates
...: group by group_num''')
...: res = cur.fetchall()
...:
In [6]: res
Out[6]: [(1, 1), (2, 2), (3, 0)]