这可能在其他地方有答案,但由于缺乏适当的知识,我一直无法正确使用它。
我有以下(简化)表格:

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/

10-13 07:06