Mysql 如何从不同的表中选择百分比和计数计算
请告诉我需要帮助才能完成以下代码:Mysql 如何从不同的表中选择百分比和计数计算,mysql,Mysql,请告诉我需要帮助才能完成以下代码: 根据批次计算已投票的选民百分比 按批次获取投票者的数量 我的桌子: voters table +-------------+-------------+----------------+ | stud_id | name | batch | +-------------+-------------+----------------+ | 1 | Peter
voters table
+-------------+-------------+----------------+
| stud_id | name | batch |
+-------------+-------------+----------------+
| 1 | Peter | 2016 |
| 2 | John | 2017 |
| 3 | Wick | 2017 |
+-------------+-------------+----------------+
vote table
+-------------+----------------+
| vote_id | stud_id |
+-------------+----------------+
| 1 | 1 |
| 2 | 2 |
+-------------+----------------+
我试过这个问题:
SELECT voters.batch,COUNT(*) AS voted_batch, 100.0 * COUNT(*) / (SELECT COUNT(*) FROM vote) AS percentage
FROM vote JOIN voters WHERE voters.stud_id=vote.stud_id
GROUP BY batch asc
该代码只能显示投票的百分比(不是从一批),只能做投票总数,我很困惑显示投票总数
我期望的表格选择是:
+-------------+----------------+----------------+----------------+
| batch |total_batch | voted_batch | percentage |
+-------------+----------------+----------------+----------------+
|2016 | 1 | 1 | 100 |
|2017 | 2 | 1 | 50 |
+-------------+----------------+----------------+----------------+
非常感谢您的支持,非常感谢。要区分一批学生的总数和一批学生的投票人数,您需要在
计数表达式中使用不同的字段:
SELECT
voters.batch,
COUNT(*) AS total_batch,
COUNT(vote.vote_id) AS voted_batch,
(COUNT(vote.vote_id) * 1.0) / (COUNT(*)) AS percentage
FROM voters
LEFT JOIN vote ON
vote.stud_id = voters.stud_id
GROUP BY voters.batch
挑选
我是巴奇,
将(*)计为总批次,
计数(投票。投票id)作为投票批,
(计票(投票。投票编号)*1.0)/(计票(*)百分比)
来自选民
左联投票
vote.stud\u id=投票者.stud\u id
按投票者分组
请注意:
COUNT(*)
统计所有学生的人数,甚至包括那些没有投票的学生(因为我们使用的是左键联接
)
COUNT(vote.vote\u id)
,即通过联接右侧表的主键进行计数,仅统计已投票的学生
我们必须将COUNT
s中的一个乘以1.0,才能将结果强制为十进制(否则,会遇到整数除法)
最后,您可能需要考虑更改您的表名以一致:一个名为“代码>选民(复数),而另一个则被命名为代码>投票(单数)。为了避免引发一场宗教战争,我不会告诉你应该选择哪一场。
好吧,张贴。但只有我发布的代码成功地显示了结果:(在条件上使用join,而不是WHERE。在创建中间结果之前,ON应用条件,WHERE应用于结果。@Mike请使用适当的功能提供答案,谢谢