我有一张这样的表:
employee_id
我的要求是找到两个值:
员工总数(level
是主键)。
junior
senior
或level
(NULL, 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;
条款中,但我无法弄清楚。
答案 0 :(得分:1)
这是使用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'
真或假的计数仍为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(测试数据略有不同)