Rumah > pangkalan data > tutorial mysql > Mengapa Saya Tidak Boleh Menggunakan Alias ​​Lajur Secara Terus dalam Pengiraan Penyata SELECT yang Sama?

Mengapa Saya Tidak Boleh Menggunakan Alias ​​Lajur Secara Terus dalam Pengiraan Penyata SELECT yang Sama?

DDD
Lepaskan: 2025-01-14 09:28:43
asal
504 orang telah melayarinya

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

Sekatan menggunakan alias lajur secara langsung untuk pengiraan dalam pertanyaan SQL

Dalam pertanyaan SQL yang diberikan, cuba menggunakan alias lajur ROUND(avg_time * cnt, 2) dan avg_time dalam ungkapan cnt menghasilkan ralat "Lajur 'avg_time' tidak wujud".

Punca utama terletak pada susunan penilaian pernyataan SELECT. Atur cara memproses keseluruhan penyataan SELECT secara serentak, jadi nilai alias tidak dapat dikenali pada masa itu.

Penyelesaian: Gunakan subkueri bersarang

Untuk menyelesaikan masalah ini, pertanyaan boleh dirangkumkan menggunakan subkueri, dengan berkesan mencipta set data perantaraan. Dalam subkueri ini, anda boleh mencipta alias lajur yang diperlukan avg_time dan cnt.

<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

Kini, apabila melaksanakan pertanyaan ini, subkueri dinilai terlebih dahulu, menghasilkan set data yang mengandungi alias lajur yang diperlukan. Kenyataan SELECT seterusnya boleh berjaya merujuk alias ini.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan Alias ​​Lajur Secara Terus dalam Pengiraan Penyata 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan