Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.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:在WHERE子句中使用以前的计算值_Sql_Postgresql - Fatal编程技术网

POSTGRESQL:在WHERE子句中使用以前的计算值

POSTGRESQL:在WHERE子句中使用以前的计算值,sql,postgresql,Sql,Postgresql,晚上好! 我有问题,因为我不能在WHERE和中使用MAXGROWTHPARENT值 克劳塞德命令。 我写了这个查询: SELECT PERSON.*, ( SELECT MAX(PARENT.GROWTH) FROM MAN PARENT WHERE (PARENT.ID = PERSON.ID_FATHER) OR (PARENT.ID = PERSON.ID_MOTHER) ) AS MAXGROWTHPARE

晚上好! 我有问题,因为我不能在WHERE和中使用MAXGROWTHPARENT值 克劳塞德命令。 我写了这个查询:

    SELECT PERSON.*, 
(
    SELECT MAX(PARENT.GROWTH) 
    FROM MAN PARENT
    WHERE 
        (PARENT.ID = PERSON.ID_FATHER)
    OR
        (PARENT.ID = PERSON.ID_MOTHER)  
) AS MAXGROWTHPARENT
FROM MAN PERSON
WHERE PERSON.GROWTH > 
(
    SELECT MAX(PARENT.GROWTH) 
    FROM MAN PARENT
    WHERE 
        (PARENT.ID = PERSON.ID_FATHER)
    OR
        (PARENT.ID = PERSON.ID_MOTHER)
)
ORDER BY (PERSON.GROWTH - 
    (
        SELECT MAX(PARENT.GROWTH) 
        FROM MAN PARENT
        WHERE 
            (PARENT.ID = PERSON.ID_FATHER)
        OR
            (PARENT.ID = PERSON.ID_MOTHER)
    )
);
我的代码看起来很难看。你能告诉我如何使用MAXGROWTHPARENT吗
在WHERE和ORDER BY子句中?

我认为两个单独的联接可能会更好:

select p.*, greatest(pf.growth, pm.growth) as MAXGROWTHPARENT
from man p left join
     man pf
     on p.id_father = pf.id_father left join
     man pm
     on p.id_mother = pm.id_mother
order by p.growth - greatest(pf.growth, pm.growth);
注意:如果联接可能不匹配,您可能更喜欢:

select p.*, greatest(coalesce(pf.growth, pm.growth), coalesce(pm.growth, pf.growth)) as MAXGROWTHPARENT
from man p left join
     man pf
     on p.id_father = pf.id_father left join
     man pm
     on p.id_mother = pm.id_mother
order by p.growth - greatest(coalesce(pf.growth, pm.growth), coalesce(pm.growth, pf.growth));