【问题标题】:MySql Query - Grouping records to get the percentageMySql 查询 - 分组记录以获取百分比
【发布时间】:2015-04-27 07:38:39
【问题描述】:

用我最简单的方式来说明:

用户: (没什么特别的)

-----------------------------------------
UserID  |        Fullname
-----------------------------------------
 User1   |        JohnDoe
-----------------------------------------
 User2   |        PeterPan
-----------------------------------------
 User3   |        BatMan
-----------------------------------------

----------------------------------------
GroupID     |   Group_Name             |
----------------------------------------
      1     |   Manager                |
----------------------------------------
      2     |   Reviewer               |
----------------------------------------


      

员工

----------------------------------------
UserID  |   GroupID            |
----------------------------------------
 User1  |        1             |
----------------------------------------
 User2  |        2             |
----------------------------------------
 User3  |        2             |
----------------------------------------

表格项目分配

--------------------------------------------------------
ID   | ProjectID    | Reviewer |  Status
--------------------------------------------------------
 1   |        1     | User2    | Approved
--------------------------------------------------------
 2   |        2     | User2    | Disapproved
---------------------------------------------------------
 3   |        2     | User2    | Approved
---------------------------------------------------------
 4   |        3     | User3    | Disapproved
---------------------------------------------------------
 5   |        3     | User3    | Disapproved
---------------------------------------------------------
 6   |        3     | User3    | Disapproved
---------------------------------------------------------
 7   |        3     | User3    | Approved
---------------------------------------------------------

数据简介详情:

  • User2 和 User3 是审阅者
  • Project Assignment表下,Project可以多次提交,直到Reviewer设置Status已批准(请参阅下面的注释
  • > 注意: 在某些情况下,状态可以被批准两次,这就是为什么 我需要计算已批准项目的数量而不是未批准项目的数量

问题:

我想查询 Project Assignment 表以获取 Approved(Status) Projectgroup by ProjectID 每个 Reviewer 的百分比

现在,我得到的是所有项目的总数,而不是每个审阅者分配的项目

我的 Sql 查询:

SELECT `Reviewer`, 
`ProjectID`,
 COUNT(*) as NumberOfTimesProjectSubmitted ,  
 Round((Select COUNT(*) From `Project Assignment` 
       Where Status='Approved') / (COUNT(*)) *100,2) AS Approval_Percentage 
FROM `Project Assignment`
GROUP by ProjectID

预期的查询结果大概是这样的:

-----------------------------------------------------------------------
Reviewer | ProjectID | NumberOfTimesProjectSubmitted | Approval Percentage
-----------------------------------------------------------------------
 User2   |    1      |             1                 |  100.00
-----------------------------------------------------------------------
 User2   |    2      |             2                 |   50.00
-----------------------------------------------------------------------
 User3   |    3      |             4                 |   25.00
------------------------------------------------------------------------

对不起,如果我错过了一些细节,但这就是我说明我要解决的问题的方式。我确实尝试了几次(几乎已经一天了),但没有得到结果。我尝试了单独的查询,但仍然得到项目总数,而不是在 Reviewer 下的每个项目。

【问题讨论】:

  • 将 Reviewer 添加到 group by 子句

标签: mysql sql group-by


【解决方案1】:

在最简单的级别,您只需按审阅者和项目 ID 进行分组。但是,您也可以删除子查询以获得批准百分比。

SELECT `Reviewer`, 
   `ProjectID`,
    COUNT(*) as NumberOfTimesProjectSubmitted ,  
    Round((SUM(CASE When Status = 'Approved' THEN 1 ELSE 0 END) / COUNT(*), 2)) 
    AS Approval_Percentage
FROM `Project Assignment`
GROUP by Reviewer, ProjectID

【讨论】:

    【解决方案2】:

    您可以通过使用 sum 和表达式 sum(Status='Approved') 来实现这一点,这将导致布尔值 0/1 并根据您的条件作为计数结果,然后您可以将批准百分比计算为 ( sum(Status='Approved') / COUNT(*)) * 100 不需要对于子查询

    SELECT `Reviewer`, 
    `ProjectID`,
     COUNT(*) as NumberOfTimesProjectSubmitted ,
     ( sum(Status='Approved')  / COUNT(*)) * 100 Approval_Percentage 
    FROM `Project_Assignment`
    GROUP by ProjectID,Reviewer
    

    DEMO

    【讨论】:

      猜你喜欢
      • 2019-08-12
      • 2016-12-30
      • 2021-01-29
      • 2011-11-12
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      相关资源
      最近更新 更多