Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何从不同的表中选择百分比和计数计算_Mysql - Fatal编程技术网

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请使用适当的功能提供答案,谢谢