Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menggunakan Lajur Dikira dalam Pertanyaan PostgreSQL Tanpa Ralat?

Bagaimanakah Saya Boleh Menggunakan Lajur Dikira dalam Pertanyaan PostgreSQL Tanpa Ralat?

Patricia Arquette
Patricia Arquetteasal
2025-01-14 06:06:42552semak imbas

How Can I Use Calculated Columns in PostgreSQL Queries Without Errors?

Lajur Dikira PostgreSQL: Penyelesaian untuk Had

Pengendalian lajur yang dikira PostgreSQL berbeza daripada sistem pangkalan data lain. Merujuk terus lajur yang dikira kemudian dalam pertanyaan yang sama tidak disokong. Had ini ditunjukkan oleh contoh berikut, yang akan menghasilkan ralat:

<code class="language-sql">SELECT cost_1, quantity_1, cost_2, quantity_2, 
       (cost_1 * quantity_1) AS total_1,
       (cost_2 * quantity_2) AS total_2,
       (total_1 + total_2) AS total_3  -- Error: total_1 and total_2 are not found
FROM data;</code>

Ralat timbul kerana PostgreSQL memproses pertanyaan baris demi baris; total_1 dan total_2 tidak tersedia untuk pengiraan seterusnya dalam penyata SELECT yang sama.

Penyelesaian melibatkan penggunaan subkueri (jadual terbitan) untuk merangkum pengiraan awal. Ini membolehkan keputusan dirujuk dalam pertanyaan luar:

<code class="language-sql">SELECT cost_1, quantity_1, cost_2, quantity_2, total_1, total_2,
       total_1 + total_2 AS total_3
FROM (
    SELECT cost_1, quantity_1, cost_2, quantity_2, 
           (cost_1 * quantity_1) AS total_1,
           (cost_2 * quantity_2) AS total_2
    FROM data
) AS t;</code>

Dengan menyarangkan pengiraan total_1 dan total_2 dalam penyata SELECT dalam (disebut sebagai t), pengiraan tersebut boleh diakses dan boleh digunakan untuk pengiraan lanjut dalam penyata SELECT luar. Kaedah ini menyediakan cara yang praktikal dan cekap untuk bekerja dengan lajur yang dikira dalam PostgreSQL tanpa overhed prestasi yang ketara.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Lajur Dikira dalam Pertanyaan PostgreSQL Tanpa Ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn