我有以下两个表
用户
UserID UserName UserCountry 1 User1 India 2 User2 India 3 User3 India 4 User4 China 5 User5 China 6 User6 Brazil 7 User7 Brazil 8 User8 USA 9 User9 USA 10 User10 USA
状态
UserID UserStatus 1 Active 2 Active 3 Inactive 4 Inactive 5 Dormant 6 Dormant 7 Active 8 Inactive 9 Active 10 Active
我想查询这些表并计算按国家/地区排列的活跃用户的百分比。此示例中的输出应为
Country Percentage India 66.66% China 0.00% Brazil 50.00% USA 66.66%
使用下面的查询,我能够分别提取百分比公式的分子和分母,但不明白如何从这里开始。如果有人可以建议如何在单个查询中提取所需的输出,那将是最好的。
data-turbolinks="false"
我已经彻底搜索了SO和Google,但还没有找到任何合适的答案。一个接近的答案是Difficulty with ActiveRecord query that does percentage calculation,但即使这对我也不起作用。
答案 0 :(得分:1)
试试这个:
User.joins(:status).select("users.country AS user_country", "statuses.status AS user_status", "COUNT(*) AS count", "ROUND((COUNT(*)*100.0/(SELECT COUNT(*) FROM statuses WHERE status = 'Active')), 2) AS percentage").where("user_status = 'Active'").group("user_country")
您可以克隆this project自行测试。
步骤:
joins
users
和statuses
表格select
列 - 在这种情况下,我们选择2列; country
(来自users
)和status
(来自statuses
)count
的列,告诉我们每个国家/地区的活跃用户总数statuses
表中的活跃用户总数ROUND
函数percentage
where
部分group
按国家/地区希望这有帮助。
<强>更新强>
结果示例:
+----+--------------+-------------+-------+------------+
| id | user_country | user_status | count | percentage |
+----+--------------+-------------+-------+------------+
| | Brazil | Active | 7 | 20.59 |
| | China | Active | 9 | 26.47 |
| | India | Active | 11 | 32.35 |
| | USA | Active | 7 | 20.59 |
+----+--------------+-------------+-------+------------+