我有这个查询,它显示有关主题出现在案例 A 和案例 B 中的频率以及案例 A 的出现百分比的信息。
select subject,
count(subject) as frequency,
count(case when result='OK' then 1 else null end) as case_a,
count(case when result='NG' then 1 else null end) as case_b,
round(
(
(count(case when result='OK' then 1 else null end)*100.00)/count(subject)),4)
)
from test
group by subject
我猜是否有更好分类的方法来计算百分比而无需再次应用计数案例。
round(((case_a*100.00) / frequency),4)
尝试像这样引用列^ 但不起作用。
最佳答案
如您所述,您不能像这样引用列别名。一种解决方法是将所有计算放在子查询中:
SELECT subject, frequency, case_a, case_b, ROUND(case_a * 100.0 / frequency, 4)
FROM (SELECT subject,
COUNT(subject) AS frequency,
COUNT(CASE WHEN result = 'OK' THEN 1 ELSE NULL END) AS case_a,
COUNT(CASE WHEN result = 'NG' THEN 1 ELSE NULL END) AS case_b
FROM test
GROUP BY subject) t
编辑:
作为旁注,如果 case
表达式中的任何条件都不满足,则返回 null
,因此您可以使用稍微短一些的表达式。那么效果最终是一样的,所以主要是口味问题:
SELECT subject, frequency, case_a, case_b, ROUND(case_a * 100.0 / frequency, 4)
FROM (SELECT subject,
COUNT(subject) AS frequency,
COUNT(CASE result WHEN 'OK' THEN 1 END) AS case_a,
COUNT(CASE result WHEN 'NG' THEN 1 END) AS case_b
FROM test
GROUP BY subject) t
关于Postgresql - 来自查询列的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35564166/