未按顺序找到的聚合列

时间:2017-08-24 19:06:50

标签: sql postgresql

我尝试根据两个聚合列进行排序

SELECT  count(ids) as no_of_ids , sum((rate > 0)::int)as right_count
From  profile_performance
group By  p.profile_id
Order by  (right_count/predictions) desc limit 10 
我得到的错误是:

ERROR:  column "right_count" does not exist
LINE 6: Order by  (right_count/no_of_ids::float) desc limit 10
               ^
********** Error **********

ERROR: column "right_count" does not exist
SQL state: 42703
Character: 413

但以下工作正常:

SELECT  count(ids) as no_of_ids , sum((rate > 0)::int)as right_count
From  profile_performance
group By  p.profile_id
Order by  right_count,predictions desc limit 10 

是否可以在不使用外部查询的情况下修复它?

1 个答案:

答案 0 :(得分:2)

您应该可以重复表达式:

SELECT  count(ids) as no_of_ids , sum((rate > 0)::int) as right_count
From  profile_performance
group By  p.profile_id
Order by  (sum((rate > 0)::int) / predictions) desc
limit 10 ;

显然,Postgres允许您引用order by中的列别名。但是,它无法识别包含它们的表达式。

这显然是documented

  

请注意,输出列名称必须独立,即不能   在表达式中使用 - 例如,这是不正确的:

SELECT a + b AS sum, c FROM table1 ORDER BY sum + c;          -- wrong
     

这种限制是为了减少歧义。仍有歧义   如果ORDER BY项是一个可以匹配输出的简单名称   列名称或表表达式中的列。输出列   在这种情况下使用。如果您使用AS,这只会造成混淆   重命名输出列以匹配其他表列的名称。