我正在将旧的基于 MS-Access 的系统转换为 PostgreSQL。在 Access 中,由 SELECT 组成的字段可以用作后面字段的等式的一部分,如下所示:
SELECT
samples.id,
samples.wet_weight / samples.dry_weight - 1 AS percent_water,
100 * percent_water AS percent_water_100
FROM samples;
Run Code Online (Sandbox Code Playgroud)
当我在 PostgreSQL 中这样做时,Postgres 抛出一个错误:
错误:“percent_water”列不存在。
通过从子选择中进行选择,我可以通过以下方式解决此问题:
SELECT
s1.id,
s1.percent_water,
100 * s1.percent_water AS percent_water_100
FROM (
SELECT
samples.id,
samples.wet_weight / samples.dry_weight - 1 AS percent_water
FROM samples
) s1;
Run Code Online (Sandbox Code Playgroud)
有没有像第一个代码块那样的快捷方式来绕过复杂的嵌套?我也可以说100 * (samples.wet_weight / samples.dry_weight - 1) AS percent_water_100,但这只是我的代码中进行的更大的数学系统中的一个小例子,其中有数十个更复杂的数学位相互叠加。我宁愿尽可能干净地做而不重复自己。