Postgresql 如何在postgres查询中嵌套查询
我正试图为以下需求构建一个Postgres查询(如下所示) 我有两张桌子,Postgresql 如何在postgres查询中嵌套查询,postgresql,Postgresql,我正试图为以下需求构建一个Postgres查询(如下所示) 我有两张桌子,member和booking。对于每个预订,会员都会收到一个评分(评分可以在1到5之间,5是最高分)。此查询的输出当前显示每个成员的总分 我现在需要添加每个会员最近的预订,但我不确定如何添加!?:-(这应该是可能的,因为booking表中有一列我可以使用的time\u start。您可以在下面看到我的尝试,我基本上是在现有查询中添加以下内容: 获取每个会员的最新预订信息 SELECT time_starts from bo
member
和booking
。对于每个预订,会员都会收到一个评分(评分可以在1到5之间,5是最高分)。此查询的输出当前显示每个成员的总分
我现在需要添加每个会员最近的预订,但我不确定如何添加!?:-(这应该是可能的,因为booking
表中有一列我可以使用的time\u start
。您可以在下面看到我的尝试,我基本上是在现有查询中添加以下内容:
获取每个会员的最新预订信息
SELECT time_starts from booking WHERE id = XYZ ORDER BY time_starts DESC LIMIT 1
查询
with member_ratings AS (
select
r.member_id,
sum(IsNull(r.rating, 0)) "total",
cast(count(*) * 5 as decimal) "possible_max",
cast(total/possible_max as decimal(10,2)) "score_as_percentage",
cast(5 * score_as_percentage as decimal(10,2)) "score"
from review r
join booking b on 'urn:booking:' || b.id = r.booking_urn
group by 1
)
SELECT *
FROM member_ratings
where score < 4.8
order by score desc
非常感谢
此处提供查询更新
https://dbfiddle.uk/?rdbms=postgres_13&fiddle=409abbd3519d30f6de63003752d7d9fb
我认为您不需要在此处进行子查询。您已经从
booking
表中进行了选择,并按成员分组-您所需要的只是一个聚合函数,该函数为您提供每个组中最后一次开始时间
日期:
select
r.member_id,
sum(IsNull(r.rating, 0)) "total",
cast(count(*) * 5 as decimal) "possible_max",
cast(total/possible_max as decimal(10,2)) "score_as_percentage",
cast(5 * score_as_percentage as decimal(10,2)) "score",
max(b.time_starts) "most_recent"
from review r
join booking b on 'urn:booking:' || b.id = r.booking_urn
group by 1;
使用
(选择…)作为“最近的”
。没有等号。只有别名前的表达式。(另外,获取正确的值,而不是XYZ
)不确定如何替换XYZ?嗯,您希望为每个子查询使用什么id?查询将返回成员及其预订。每个预订都有一个评级。但我还希望每个成员收到的上一次预订的日期。因此子查询(获取最新预订)需要位于“在'urn:booking:'| | b.id=r.booking_urn”筛选器上加入预订b..我认为我的尝试无法做到这一点,因为它位于连接之外,而在选择中(试图解释这是在推送我的sql知识),我将进行一些测试,但我认为您是对的,使用您的查询进行初始检查看起来不错
select
r.member_id,
sum(IsNull(r.rating, 0)) "total",
cast(count(*) * 5 as decimal) "possible_max",
cast(total/possible_max as decimal(10,2)) "score_as_percentage",
cast(5 * score_as_percentage as decimal(10,2)) "score",
max(b.time_starts) "most_recent"
from review r
join booking b on 'urn:booking:' || b.id = r.booking_urn
group by 1;