MySQL 计算百分比

38

我有一个MySQL数据库,其中包含4个项目:id(数字)、group_nameemployeessurveys

在我的SELECT语句中,我需要计算已参与调查的“employees”的百分比,根据“surveys”中的数字。

这是我现在拥有的语句:

SELECT
  group_name,
  employees,
  surveys,
  COUNT( surveys ) AS test1, 
  ((COUNT( * ) / ( SELECT COUNT( * ) FROM a_test)) * 100 ) AS percentage
FROM
  a_test
GROUP BY
  employees

这里是目前的表格:

INSERT INTO a_test (id, group_name, employees, surveys) VALUES
(1, 'Awesome Group A', '100', '0'),
(2, 'Awesome Group B', '200', '190'),
(3, 'Awesome Group C', '300', '290');

我希望能够计算出员工中根据调查问卷数量参与调查的百分比。例如,如上所示,优秀团队A的比例为0%,而优秀团队B的比例为95%。


示例数据和您期望的结果是什么? - echo_Me
这是当前的表格:'INSERT INTO a_test (id, group_name, employees, surveys) VALUES (1, 'Awesome Group A', '100', '0'), (2, 'Awesome Group B', '200', '190'), (3, 'Awesome Group C', '300', '290');' 我想计算“员工”中根据“调查”中的数字参与了调查的百分比。例如,像上面的Awesome Group A将是0%,而Awesome Group B将是95%。 - user2232709
@Kermit 为什么 GROUP BY 不好? - Thomas
1
@Thomas MySQL选择哪些字段进行GROUP BY是基于其自身的规则。其他平台要求在SELECT中出现的非聚合字段必须在GROUP BY中列出,但MySQL不遵循这个标准。 - Kermit
1
@Thomas 只是想补充一下,它选择显示的不是任意字段,而是非分组字段的值。在5.8(也许5.7)中,该行为现在与其他数据库一致。非标准行为很有用,但如果您依赖它,则很危险。 - Chris McCauley
显示剩余2条评论
1个回答

88

试试这个

   SELECT group_name, employees, surveys, COUNT( surveys ) AS test1, 
        concat(round(( surveys/employees * 100 ),2),'%') AS percentage
    FROM a_test
    GROUP BY employees

这里演示


我怎样可以在这里使用列别名?比如,如果我正在计算员工值,例如“employees_type1+employees_type2 AS employees”,那么我是否可以在concat函数中使用employees别名? - Happy Coder
不行,你必须使用连接或子查询。 - echo_Me

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接