这可能在其他地方有答案,但由于缺乏适当的知识,我一直无法正确使用它。
我有以下(简化)表格:
users
-id
-country
group_selections
-id
-user_id
-group_id
-rank
我正在做一个内部连接,如下所示:
SELECT
`group_id`, `country`
FROM `group_selections` AS `GroupSelection`
JOIN `users` AS `User`
ON (`GroupSelection`.`user_id` = `User`.`id`)
GROUP BY `country`
ORDER BY `group_id`, `country`
返回如下行:
| group_id | country |
|----------|-----------|
| 1 | Spain |
| 1 | USA |
| 2 | Canada |
| 2 | Chile |
| 2 | USA |
| 2 | Venezuela |
| 3 | Australia |
| 3 | Canada |
| 3 | China |
| 3 | USA |
| 4 | Spain |
实际上,我需要的是得到这样的东西:
| group_id | country | percentage_country |
|----------|-----------|--------------------|
| 1 | Spain | 0.50 |
| 1 | USA | 0.50 |
| 2 | Canada | 0.25 |
| 2 | Chile | 0.25 |
| 2 | USA | 0.25 |
| 2 | Venezuela | 0.25 |
| 3 | Australia | 0.25 |
| 3 | Canada | 0.25 |
| 3 | China | 0.25 |
| 3 | USA | 0.25 |
| 4 | Spain | 1.00 |
这只不过是来自每个国家选择特定组的用户的百分比(用户可以选择多个组加入)。
SQLFiddle here
为了说明原因:在我的应用程序中,我试图根据用户所在的国家为他们提供一个优势,因此如果一个国家与另一个国家相比有许多用户(他们希望加入一个组),那么用户较少的国家在挑选用户时会获得优势。
这看起来非常简单,但我没能让它工作。请帮忙?
最佳答案
尝试以下解决方案,SQLFidle为:http://sqlfiddle.com/#!9/8c228/35
SELECT
`GroupSelection`.`group_id`, `country`, COUNT(`country`)/`GroupCount`.member_cnt as `percentage_country`
FROM `group_selections` AS `GroupSelection`
JOIN `users` AS `User`
ON (`GroupSelection`.`user_id` = `User`.`id`)
JOIN (SELECT gs.`group_id`, COUNT(*) AS `member_cnt`
FROM `group_selections` AS gs
GROUP BY gs.`group_id`) `GroupCount`
ON (`GroupSelection`.`group_id` = `GroupCount`.`group_id`)
GROUP BY `country`, `group_id`
ORDER BY `group_id`, `country`
关于mysql - 在查询中正确使用COUNT函数以获取百分比(MySQL),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35979162/