2016-07-15 6 views
0

1回のクエリで複数のカウント値を返そうとしています。クエリは動作しますが、カウントセレクタの両方に同じ値を返します。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 
関連する問題