sql - PostgreSQL 练习:GROUP BY 子句或在聚合函数中使用
问题描述
我在做 PostgreSQL 练习 - 按价值分类设施时遇到了一个问题。这是问题链接:https ://pgexercises.com/questions/aggregates/classify.html
我试过了:
select name,
(case when rank <= max(rank)/3 then 'high'
when rank > max(rank)/3 and rank <= max(rank)*2/3 then 'average'
else 'low' end) as revenue
from
(select name, rank() over (order by sum(
case when boo.memid=0 then slots*guestcost
when boo.memid!=0 then slots*membercost end) desc) as rank
from cd.bookings boo join cd.facilities fac on boo.facid=fac.facid
group by name) subq
我也试过:
with subq as
(select name, rank() over (order by sum(
case when boo.memid=0 then slots*guestcost
when boo.memid!=0 then slots*membercost end) desc) as rank
from cd.bookings boo join cd.facilities fac on boo.facid=fac.facid
group by name)
select name,
(case when rank <= max(rank)/3 then 'high'
when rank > max(rank)/3 and rank <= max(rank)*2/3 then 'average'
else 'low' end) as revenue from subq
两者都出现错误:列“sub.name”必须出现在 GROUP BY 子句中或在聚合函数中使用
我很困惑,不知道我的代码有什么问题。有谁能够帮我?
解决方案
您必须按名称和排名对结果表进行分组。
只需将其附加到您的语句中,它就会运行而不会出现错误:
group by name, rank
推荐阅读
- javascript - 输入按键在 datepicker jquery 中不起作用
- archive - 为什么 get_post_type_archive_link 不能正常工作?
- python - 嵌套循环的并行性
- python - 了解 AttributeError 的原因
- stack - 如何在 .equate 中编写此 pep8 代码并将其存储在堆栈中
- android - Android.mk 子目录的构建问题
- sqlite - sqlite flutter中没有保存一些数据库字段,如何在数据库中检查?
- javascript - barba js转换后HTML页面未加载
- postgresql - Docker 组合 PostgreSQL 复制功能,但在数据库中找不到关系
- azure - Azure Pipeline - 在任务之间传递变量