【问题标题】:MySQL Calculate PercentageMySQL 计算百分比
【发布时间】:2013-03-22 17:20:28
【问题描述】:

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

在我的SELECT 中,我需要根据“调查”中的人数计算参与调查的“员工”的百分比。

这是我现在的声明:

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');

我很想用surveys 中的数字计算employees 参加调查的百分比。即如上图所示,Awesome Group A 为 0%,Awesome Group B 为 95%。

【问题讨论】:

  • 不应使用此GROUP BY 做法。它是非标准的,会产生不希望的结果。
  • 样本数据和您希望的结果可能吗?
  • 这是当前的表格:'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 这样的 IE 将是 0%,Awesome Group B 将是 95%
  • @Thomas MySQL chooses which fields to GROUP BY as it feels。所有其他平台都要求SELECT 中的非聚合字段出现在GROUP BY 中。 MySQL 不遵循这个标准。
  • @Thomas 只是补充一点,它不是按感觉选择的字段,而是它选择显示的非组字段的值。在 5.8(也可能是 5.7)中,行为现在与其他数据库一致。如果您依赖它,非标准行为很有用,但很危险。

标签: mysql percentage


【解决方案1】:

试试这个

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

DEMO HERE

【讨论】:

  • 如何在此处使用列别名?就像我正在计算“employees_type1+employees_type2 AS 员工”之类的员工值,那么我是否可以在 concat 函数中使用员工别名?
  • 不,你不能。您必须使用联接或子查询。
猜你喜欢
  • 1970-01-01
  • 2013-11-15
  • 2022-01-23
  • 2012-09-20
  • 2016-09-26
  • 2012-04-05
  • 2011-06-01
  • 2021-01-10
相关资源
最近更新 更多