ฉันกำลังแปลงระบบเก่าที่ใช้ MS-Access เป็น PostgreSQL ในการเข้าถึงเขตข้อมูลที่สร้างขึ้นใน SELECT สามารถใช้เป็นส่วนหนึ่งของสมการสำหรับเขตข้อมูลในภายหลังเช่นนี้
SELECT
samples.id,
samples.wet_weight / samples.dry_weight - 1 AS percent_water,
100 * percent_water AS percent_water_100
FROM samples;
เมื่อฉันทำเช่นนี้ใน 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;
มีทางลัดประเภทใดบ้างในบล็อคโค้ดแรกที่จะทำการวางซ้อนที่ซับซ้อน? ฉันสามารถพูด100 * (samples.wet_weight / samples.dry_weight - 1) AS percent_water_100
ได้ แต่นี่เป็นเพียงตัวอย่างเล็ก ๆ ของระบบคณิตศาสตร์ที่มีขนาดใหญ่กว่าที่เกิดขึ้นในรหัสของฉันโดยที่มีบิตของคณิตศาสตร์ที่ซับซ้อนกว่าหลายสิบซ้อนกันซ้อนทับกัน ฉันต้องการทำอย่างสะอาดที่สุดโดยไม่ต้องทำซ้ำตัวเอง