SELECT子句中的SQL函数计数(使用百分比进行说明)

时间:2016-02-19 00:18:38

标签: mysql sql select count percentage

我有一张这样的表:

employee_id

我的要求是找到两个值:

  • 员工总数(level是主键)。

  • junior seniorlevelNULL, apprentice, junior, senior的可能值:SELECT count(employee_id) AS quantity, ((count(level = 'junior' OR level = 'senior') * 100) / count(employee_id)) AS percentage FROM table WHERE study_environment = 'law' AND work_environment = 'law' )和研究和工作的员工百分比在相同的CHOSEN环境中。

我的实际查询是:

SELECT

它没有按预期工作,我几乎可以肯定错误在String UserName = Request.LogonUserIdentity.Name; 条款中,但我无法弄清楚。

2 个答案:

答案 0 :(得分:1)

这是使用sumcase条件聚合的一个选项:

select count(*) overallcount,
      100 * sum(case when level in ('junior','senior') then 1 else 0 end) / count(*)
FROM table 
WHERE study_environment = 'law'
      AND work_environment = 'law'

真或假的计数仍为1,因此总结不正确。

答案 1 :(得分:1)

您可以在CASE .... WHEN语句中使用多个条件来执行适当的计数/计算:

SELECT count(*) AS total,
    (100*SUM(CASE WHEN (level = 'junior' OR level = 'senior') 
             AND work = 'law' AND study = 'law'
             THEN 1 ELSE 0 END))/count(*) AS percentage
FROM employee;

这与其他答案类似,但计算整个表的总数(即每个员工都计算在内),而不是只计算那些符合WHERE子句中设置的条件的记录,这是(我认为)什么你想要的。

SQLFiddle:http://sqlfiddle.com/#!9/5feb0/21

(注意:为了方便起见,我缩短了列名,但意图应该是明确的。)

更一般地说,如果你想要工作=学习(但不一定是'法律'):

SELECT count(*) AS total,
    (100*SUM(CASE WHEN (level = 'junior' OR level = 'senior') 
             AND work = study
             THEN 1 ELSE 0 END))/count(*) AS percentage
FROM employee;

http://sqlfiddle.com/#!9/18960a/1(测试数据略有不同)