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;