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

SQL function count in SELECT clause (clarifications with percentage)

我有一个 table 这样的:

    --------------------------------------------------------------
    - employee_id - level - study_environment - work_environment -                     
    --------------------------------------------------------------
    --                         values...                        --
    --------------------------------------------------------------

我的要求是找到两个值:

我的实际查询是:

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'

它没有按预期工作,我几乎可以肯定错误出在 SELECT 子句中,但我无法弄清楚。

这是使用 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'

true或false的计数仍然是1,因此求和不正确。

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

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;

这个和另一个答案类似,但是计算整个table的总和(即每个员工都被统计),而不是只统计那些满足WHERE子句中设置条件的记录,这是(我认为)你想要的。

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

(注意:为方便起见,我缩短了列名,但意图应该很清楚。)

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

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(测试数据略有不同)