sqlite3 группировать по - PullRequest
       3

sqlite3 группировать по

0 голосов
/ 11 ноября 2010

У меня есть 2 таблицы fun (master) и blk (slave).

sqlite> select * from fun;
id          mod_id      name         freq      
----------  ----------  -----------  ----------
1           1           adpcm_coder  99108     
2           1           adpcm_decod  0         

Я хочу посчитать, сколько blk есть для развлечения, поэтому я использую «group by»:

sqlite> SELECT fun.*, count(blk.id) as no_blk FROM fun, blk WHERE fun.id=blk.fun_id GROUP BY (blk.fun_id);
id          mod_id      name         freq        no_blk     
----------  ----------  -----------  ----------  ----------
1           1           adpcm_coder  99108       12        

2-я строка отклонена, поскольку blks для нее не существует. Как получить такой результат?

id          mod_id      name         freq        no_blk     
----------  ----------  -----------  ----------  ----------
1           1           adpcm_coder  99108       12        
2           1           adpcm_decod  0           0

Ответы [ 2 ]

3 голосов
/ 11 ноября 2010

Вы хотите OUTER JOIN.
Также вы должны GROUP BY все неагрегированные столбцы в предложении SELECT.

Попробуйте что-то вроде этого:

  SELECT fun.id, fun.mod_id, fun.name, fun.freq, count(blk.id) as no_blk 
    FROM fun
         LEFT OUTER JOIN blk
         ON blk.fun_id = fun.id
GROUP BY fun.id, fun.mod_id, fun.name, fun.freq;
1 голос
/ 11 ноября 2010

Адам прав; другой подход:

SELECT fun.*, count(blk.id) as no_blk FROM fun, blk 
WHERE fun.id=blk.fun_id GROUP BY (blk.fun_id) 
UNION 
SELECT fun.*, 0 as no_blk FROM fun, blk 
WHERE fun.id not in (SELECT fun.id from fun, blk WHERE fun.id=blk.fun_id);
...