Pernyataan SQL SELECT: Menggunakan Alias Lajur Pengumpulan Pasca
Operasi pangkalan data selalunya memerlukan penggunaan alias lajur dalam SELECT
ungkapan berikutan klausa GROUP BY
. Walau bagaimanapun, menggunakan alias secara langsung dalam konteks ini kerap membawa kepada ralat.
Pertimbangkan pertanyaan SQL ini:
<code class="language-sql">SELECT COALESCE(ROUND(stddev_samp(time), 2), 0) as stddev_time, MAX(time) as max_time, ROUND(AVG(time), 2) as avg_time, MIN(time) as min_time, COUNT(path) as cnt, ROUND(avg_time * cnt, 2) as slowdown, path FROM loadtime GROUP BY path ORDER BY avg_time DESC LIMIT 10;</code>
Melaksanakan pertanyaan ini mungkin menghasilkan ralat yang menunjukkan bahawa "avg_time" tidak ditentukan. Ini berlaku kerana pangkalan data memproses pernyataan SELECT
secara keseluruhan; alias tidak ditakrifkan cukup awal untuk digunakan dalam pernyataan yang sama.
Penyelesaian melibatkan penggunaan subkueri. Ini membolehkan alias ditakrifkan dan boleh diakses dalam pertanyaan luar. Inilah pertanyaan yang diperbetulkan:
<code class="language-sql">SELECT stddev_time, max_time, avg_time, min_time, cnt, ROUND(avg_time * cnt, 2) as slowdown FROM ( SELECT COALESCE(ROUND(stddev_samp(time), 2), 0) as stddev_time, MAX(time) as max_time, ROUND(AVG(time), 2) as avg_time, MIN(time) as min_time, COUNT(path) as cnt, path FROM loadtime GROUP BY path ORDER BY avg_time DESC LIMIT 10 ) X;</code>
Subkueri dalaman mentakrifkan alias. Pertanyaan luar kemudian menggunakan alias yang telah ditetapkan ini untuk pengiraan dan pemilihan, menghalang ralat. Pendekatan ini membolehkan manipulasi data berdasarkan hasil terkumpul dengan merujuk alias yang dibuat dalam skop subkueri.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Alias Lajur Selepas Pengumpulan dalam Penyata SQL SELECT?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!