Rumah > pangkalan data > tutorial mysql > Mengapa Saya Tidak Boleh Menggunakan Alias ​​Lajur dalam Pernyataan SELECT yang Sama?

Mengapa Saya Tidak Boleh Menggunakan Alias ​​Lajur dalam Pernyataan SELECT yang Sama?

Linda Hamilton
Lepaskan: 2025-01-14 08:16:43
asal
672 orang telah melayarinya

Why Can't I Use Column Aliases in the Same SELECT Statement?

Penjelasan bahawa alias lajur dalam pertanyaan SQL tidak boleh digunakan semula dalam pernyataan SELECT yang sama

Dalam pertanyaan SQL yang diberikan, cuba gunakan alias lajur (avg_time dan cnt) dalam ungkapan (ROUND(avg_time * cnt, 2)) selepas pernyataan SELECT. Walau bagaimanapun, ini menimbulkan ralat kerana alias lajur tidak boleh diakses dalam ungkapan SELECT berikutnya.

Had ini timbul daripada susunan enjin SQL memproses pertanyaan. Pernyataan SELECT dilaksanakan terlebih dahulu, dan alias dibuat semasa fasa ini. Walau bagaimanapun, ungkapan seterusnya diproses kemudian, pada ketika itu alias belum ditakrifkan.

Penyelesaian: Gunakan subquery

Untuk mengatasi had ini, subkueri boleh digunakan. Subkueri ialah pertanyaan berasingan yang dibenamkan dalam pertanyaan lain. Dalam kes ini, anda boleh menggunakan subkueri untuk mencipta alias dan kemudian mengaksesnya dalam pertanyaan luar.

Pertanyaan berikut menggunakan subkueri untuk merangkum pertanyaan asal dan menjadikan alias lajur tersedia di lapisan luar:

<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>
Salin selepas log masuk

Dalam pertanyaan ini, subkueri (dalam kurungan) mencipta alias lajur stddev_time, max_time, avg_time, min_time dan cnt. Pertanyaan luar kemudian memilih lajur daripada subkueri, termasuk alias avg_time, yang digunakan dalam ungkapan ROUND(avg_time * cnt, 2) tanpa menghadapi sebarang ralat.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan Alias ​​Lajur dalam Pernyataan SELECT yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan