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

Bagaimanakah Saya Boleh Menggunakan Lajur Dikira dalam Pertanyaan PostgreSQL yang Sama?

DDD
DDDasal
2025-01-14 08:40:42221semak imbas

How Can I Use Calculated Columns in the Same PostgreSQL Query?

Lajur Dikira PostgreSQL: Panduan Praktikal

Bekerja dengan lajur yang dikira dalam satu pertanyaan PostgreSQL kadangkala boleh menimbulkan cabaran. Tidak seperti beberapa pangkalan data SQL yang lain, pengendalian PostgreSQL bagi lajur yang dikira memerlukan pendekatan khusus.

Mengatasi Ketakserasian Sintaks SQL

Kod SQL berikut, berfungsi dalam banyak sistem pangkalan data lain, akan gagal dalam PostgreSQL:

<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
FROM data;</code>

PostgreSQL akan melaporkan bahawa total_1 dan total_2 tidak ditentukan. Ini kerana PostgreSQL menganggap lajur yang dikira sebagai alias, tidak lama untuk pelaksanaan pertanyaan.

Penyelesaian Berkesan: Memanfaatkan Jadual Terbitan

Penyelesaian melibatkan penggunaan jadual terbitan (atau subkueri) untuk mengatasi had ini:

<code class="language-sql">SELECT cost_1, quantity_1, cost_2, quantity_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 pernyataan SELECT awal dalam jadual terbitan (disebut sebagai t), pertanyaan luar kemudiannya boleh berjaya merujuk alias total_1 dan total_2. Kaedah ini tidak memperkenalkan prestasi overhed.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Lajur Dikira dalam Pertanyaan PostgreSQL yang Sama?. 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