Konwertuję stary system oparty na MS-Access na PostgreSQL. W programie Access pola utworzone w SELECT mogą być używane jako części równań dla późniejszych pól, takich jak to:
SELECT
samples.id,
samples.wet_weight / samples.dry_weight - 1 AS percent_water,
100 * percent_water AS percent_water_100
FROM samples;
Kiedy robię to w PostgreSQL, Postgres zgłasza błąd:
BŁĄD: kolumna „percent_water” nie istnieje.
Oto jak mogę to obejść, wybierając z podselekcji:
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;
Czy jest jakiś skrót, jak w pierwszym bloku kodu, aby obejść skomplikowane zagnieżdżanie? Mógłbym również powiedzieć 100 * (samples.wet_weight / samples.dry_weight - 1) AS percent_water_100
, ale to tylko mały przykład z tego, co w moim kodzie jest o wiele większym systemem matematycznym, z dziesiątkami bardziej złożonych bitów matematyki ułożonych jeden na drugim. Wolałbym robić tak czysto, jak to możliwe, bez powtarzania się.