Mysql SELECT子句中的SQL函数计数(带百分比的澄清)

Mysql SELECT子句中的SQL函数计数(带百分比的澄清),mysql,sql,select,count,percentage,Mysql,Sql,Select,Count,Percentage,我有一张这样的桌子: -------------------------------------------------------------- - employee_id - level - study_environment - work_environment - -------------------------------------------------------------- --

我有一张这样的桌子:

    --------------------------------------------------------------
    - employee_id - level - study_environment - work_environment -                     
    --------------------------------------------------------------
    --                         values...                        --
    --------------------------------------------------------------
我的要求是找到两个值:

  • 员工总数(
    employee\u id
    是主键)

  • 属于
    级别
    初级
    高级
    级别
    的可能值:
    空,学徒,初级,高级
    )且在相同选择环境中学习和工作的员工百分比

我的实际问题是:

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
子句中,但我无法找到它。

这里有一个选项,使用带
sum
case
的条件聚合:

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,因此求和不正确


您可以在一个案例中使用多个条件。。。。执行适当的计数/计算时:

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:

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

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


(测试数据略有不同)

或tipo='senior'
-输入错误?这是一个输入错误,但仅限于此处,谢谢我现在编辑
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;