2017-02-01 5 views
0

Say У меня есть таблица SQLite настроить как таковые:sqlite3: подсчитывать количество экземпляров в столбце А для каждого уникального экземпляра в столбце B

ColumnA | ColumnB 
    ---------|---------- 
     A | One 
     B | One 
     C | Two 
     D | Three 
     E | Two 
     F | Three 
     G | Three 

Есть запрос, который будет найти количество экземпляров в колонке A, которые имеют один и тот же экземпляр в столбце B? Или лучше использовать скрипт для вытягивания из строк (python sqlite3)?

, например,

query("One") = 2 
query("Two") = 2 
query("Three") = 3 

Спасибо

ответ

1

Это может быть легко достигнуто с помощью самого sqlite3.

$ sqlite3 mydb.db 
SQLite version 3.11.0 2016-02-15 17:29:24 
Enter ".help" for usage hints. 
sqlite> .databases 
seq name    file              
--- --------------- ---------------------------------------------------------- 
0 main    /home/ziya/mydb.db           
sqlite> create table two_column(col_a char(5), col_b varchar(20)); 
sqlite> insert into two_column values('A', 'One'); 
sqlite> insert into two_column values('B', 'One'); 
sqlite> insert into two_column values('C', 'Two'); 
sqlite> insert into two_column values('D', 'Three'); 
sqlite> insert into two_column values('E', 'Two'); 
sqlite> insert into two_column values('F', 'Three'); 
sqlite> insert into two_column values('G', 'Three'); 
sqlite> select * from two_column; 
A|One 
B|One 
C|Two 
D|Three 
E|Two 
F|Three 
G|Three 
sqlite> select count(*) from two_column where col_b = 'One'; 
2 
sqlite> select count(*) from two_column where col_b = 'Two'; 
2 
sqlite> select count(*) from two_column where col_b = 'Three'; 
3 

Если вы нормально с питоном,

>>> import sqlite3 
>>> c = sqlite3.connect("mydb.db") 
>>> cur = c.execute("SELECT COUNT(col_b) FROM two_column WHERE col_b = '{}' ".format('A')) 
>>> [r for r in cur] 
[(0,)] 

Вы можете легко сделать функцию, используя вышеуказанные заявления.

0

Если вы хотите, чтобы получить все счетчики на один раз, вы можете использовать группировку:

SELECT ColumnB, count(*) 
FROM MyTable 
GROUP BY ColumnB;