Postgresql - 来自查询列的百分比

标签 postgresql

我有这个查询,它显示有关主题出现在案例 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/

相关文章:

mysql - SQL - 将一个表中多个列中的两行匹配到另一个表中的 1 行。

SQL - 如何在幂等插入示例中使用连接而不是 EXISTS 和 NOT EXISTS

javascript - 计算 javascript 和 Ruby on Rails 中的字符串长度

sql - PostgreSQL GROUP BY 与 MySQL 不同?

django - Pycharm错误: Improperly configured

sql - Rails - 按列值排序(优先列)

ruby-on-rails - rails : Return only objects where all associations meet a condition

sql - 如何找到 2 个关键字列表之间的最佳匹配

node.js - 检查 PostgreSQL v9.5+ 中的 jsonb 对象内部是否存在键

mysql - 如何编写具有特定 where 条件的查询 where 查询?