sqlite3分组依据

时间:2010-11-11 20:21:06

标签: database sqlite group-by

我有2个桌子有趣(主)和blk(奴隶)。

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        

第二行被拒绝,因为它的blks不存在。 如何得到这样的结果?

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

2 个答案:

答案 0 :(得分:3)

你想要一个OUTER JOIN 此外,您应该GROUP BY SELECT子句中的所有非汇总列。{/ p>

尝试这样的事情:

  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 :(得分:1)

亚当是正确的;另一种方法:

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);
相关问题