我试图在单个查询中返回多个计数值。该查询有效,但为两个计数选择器返回相同的值:
$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 :(得分: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