我尝试根据两个聚合列进行排序
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
是否可以在不使用外部查询的情况下修复它?
答案 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,这只会造成混淆 重命名输出列以匹配其他表列的名称。