MySQL为多个计数选择

时间:2016-07-15 07:37:26

标签: 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`';

我觉得我错过了一个条件,但不确定在一个查询中是否可以进行上述操作?

1 个答案:

答案 0 :(得分: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