我们有什么方法可以在select子句中获取计算结果并将其插入select子句中的另一个计算中?
例如,这是我想要的,但目前还不能:
select trim(leading https://www.amazon.com for url) as trimmedURL,
substring(trimmedURL, from position('/' in trimmedURL) for position ('html' in trimmedURL))....
正如您所看到的,我在子字符串函数中使用了trimmedURL 3次。我知道如何天真地做到这一点是修剪(将https://www.amazon.com为url)复制/粘贴到子字符串函数中。 有没有办法避免这种情况而不是创建非常大的函数调用,因为计算的第一个值可能会多次放在其他函数中。这将提高代码的可读性和可用性。
答案 0 :(得分:0)
您可以使用lateral join
并将计算字段放在横向查询中。然后可以从主查询中访问横向字段。
Postgres documentation for lateral join
即。
SELECT
trimmedUrl
, SUBSTRING(trimmedURL,10,20) url_part
FROM mytable
LEFT JOIN LATERAL (SELECT trim(leading https://www.amazon.com for url) as trimmedURL) trmd
ON TRUE
另请注意,postgresql会忽略列/表等命名中的大小写,除非它们被引用。
这是一个独立的例子:
WITH x(col) AS (Values ('abc://cdf/def'), ('abc://xyz/pqr'))
SELECT x.col, SUBSTRING(y.col2 from position('/' in y.col2)) resuing_computation
FROM x
LEFT JOIN LATERAL (SELECT trim(leading 'abc://' from col) col2) y ON TRUE