Mysql - 多组查询

时间:2016-01-13 09:08:06

标签: mysql count group-by

我需要一点帮助 这是一个非常简单的问题,但我不知道为什么我不能得到我想要的东西

数据库

store
id | value
5  |   s

favorite
id | store_id | value
1  |    5     |   f
2  |    5     |   f 
3  |    5     |   f

party
id  |store_id | value
1   |    5    |  p
2   |    5    |  p

我的疑问:

SELECT COUNT(p.`id`) AS parties, COUNT(f.`id`) AS favorites,s.* FROM store s
LEFT JOIN party p ON p.`store_id` = s.`id`
LEFT JOIN favorite f ON f.`store_id` = s.`id`
GROUP BY s.`id`

结果

parties | favorites |   id   | value
   6    |     6     |    5   |   s

这是我想要的结果

parties | favorites |   id   | value
   2    |     3     |    5   |   s

任何人都可以帮助我吗?我已经尝试了所有可以想到的方法

1 个答案:

答案 0 :(得分:1)

如果您想要对每个商店单独计算一次聚会/收藏数,则需要计算DISTINCT个ID,这样可以消除因JOIN而导致的重复次数;

SELECT COUNT(DISTINCT p.`id`) AS parties, 
       COUNT(DISTINCT f.`id`) AS favorites,
       s.* 
FROM store s 
LEFT JOIN party p ON p.`store_id` = s.`id` 
LEFT JOIN favorite f ON f.`store_id` = s.`id` 
GROUP BY s.`id`;