2016-07-15 98 views
0

我想在單個查詢中返回多個計數值。查詢工作,但返回兩個數選擇相同的值:MySQL爲多個計數選擇返回相同的值

$sql = 'SELECT ' 
      . '`b`.*,' 
      . 'count(`ub`.`id`) `nummembers`,' 
      . 'count(`ca`.`id`) `numapps` ' 
      . 'FROM ' 
      . '`brands` `b` ' 
      . 'LEFT JOIN `user_brands` `ub` ON `ub`.`brand_id`=`b`.`id` ' 
      . 'LEFT JOIN `ca` ON `ca`.`brand_id`=`b`.`id` ' 
      . 'GROUP BY `b`.`id`'; 

我感覺到我缺少的條件,但不知道上面的一個查詢中是可能的?

+0

添加一些示例數據和您的預期結果。 – Blank

回答

2

如果您需要每個品牌組中唯一成員和應用的數量,請使用COUNT(DISTINCT col)。計數在原始查詢中出現的原因是,您要計算每個組中記錄的數量,而不考慮每個組中的實際數量。無論您選擇哪個ID進行計數,這將始終爲您提供相同的號碼。

SELECT b.*, 
     COUNT(DISTINCT ub.id) nummembers, 
     COUNT(DISTINCT ca.id) numapps, 
FROM brands b 
LEFT JOIN user_brands ub 
    ON ub.brand_id = b.id 
LEFT JOIN ca 
    ON ca.brand_id = b.id 
GROUP BY b.id