Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何在postgres查询中嵌套查询_Postgresql - Fatal编程技术网

Postgresql 如何在postgres查询中嵌套查询

Postgresql 如何在postgres查询中嵌套查询,postgresql,Postgresql,我正试图为以下需求构建一个Postgres查询(如下所示) 我有两张桌子,member和booking。对于每个预订,会员都会收到一个评分(评分可以在1到5之间,5是最高分)。此查询的输出当前显示每个成员的总分 我现在需要添加每个会员最近的预订,但我不确定如何添加!?:-(这应该是可能的,因为booking表中有一列我可以使用的time\u start。您可以在下面看到我的尝试,我基本上是在现有查询中添加以下内容: 获取每个会员的最新预订信息 SELECT time_starts from bo

我正试图为以下需求构建一个Postgres查询(如下所示)

我有两张桌子,
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;