如何从不同的表中选择百分比和计数计算

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (10)

我需要帮助来完成代码以执行以下操作:

  1. 计算基于批次投票的选民的百分比。
  2. 按批次获得选民人数。

我的桌子:

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             |    
+-------------+----------------+----------------+----------------+

非常感谢您的支持,非常感谢。

提问于
用户回答回答于

要区分批次中的学生总数以及在给定批次中投票的学生人数,您需要在COUNT表达式中使用不同的字段:

选择
    voters.batch,
    COUNT(*)AS total_batch,
    COUNT(vote.vote_id)AS voted_batch,
    (COUNT(vote.vote_id)* 1.0)/(COUNT(*))AS百分比
来自选民
    LEFT JOIN投票
        vote.stud_id = investors.stud_id
GROUP BY votes.batch

注意:

  1. COUNT(*)计算所有学生,即使是那些没有投票的学生(因为我们正在使用LEFT JOIN)。
  2. COUNT(vote.vote_id),即通过加入右侧表格的主键计数,只计算已投票的学生。
  3. 我们必须COUNT使用1.0中的多个s来将结果强制转换为十进制(否则,您将进入整数除法)。

最后,您可能需要考虑将表名更改为一致:一个名称voters(复数),另一个名称vote(单数)。为了避免发动宗教战争,我不会告诉你哪一个要去。

扫码关注云+社区

领取腾讯云代金券