Rumah >pangkalan data >tutorial mysql >Bagaimana Menggunakan Fungsi GROUP dengan betul dalam Subkueri MySQL untuk Mencari Bahagian yang Dibekalkan oleh Berbilang Pembekal?

Bagaimana Menggunakan Fungsi GROUP dengan betul dalam Subkueri MySQL untuk Mencari Bahagian yang Dibekalkan oleh Berbilang Pembekal?

DDD
DDDasal
2025-01-11 22:46:451015semak imbas

How to Correctly Use GROUP Functions in MySQL Subqueries to Find Parts Supplied by Multiple Suppliers?

Menyelesaikan masalah Ralat "Penggunaan fungsi kumpulan tidak sah" MySQL

Panduan ini menangani ralat biasa MySQL "Penggunaan fungsi kumpulan tidak sah," yang sering ditemui semasa menanyakan data yang melibatkan berbilang pembekal dan alat ganti. Matlamatnya adalah untuk mencari bahagian yang dibekalkan oleh sekurang-kurangnya dua pembekal yang berbeza.

Isu teras terletak pada penyalahgunaan klausa WHERE apabila berurusan dengan fungsi agregat seperti COUNT() dalam subkueri. WHERE menapis baris individu sebelum pengumpulan, manakala HAVING menapis kumpulan baris selepas pengagregatan. Memandangkan kita perlu menapis berdasarkan bilangan pembekal setiap bahagian (nilai agregat), HAVING adalah penting.

Pendekatan yang betul melibatkan subkueri untuk mengenal pasti bahagian yang memenuhi kriteria (sekurang-kurangnya dua pembekal) dan kemudian menggunakan IN untuk memilih bahagian tersebut daripada pertanyaan utama. Perubahan penting ialah menggantikan WHERE dengan HAVING dalam subkueri:

Struktur subkueri yang diperbetulkan kelihatan seperti ini:

<code class="language-sql">(
    SELECT c2.pid
    FROM Catalog AS c2
    GROUP BY c2.pid
    HAVING COUNT(DISTINCT c2.sid) >= 2
)</code>

Subkueri yang disemak ini menggunakan GROUP BY c2.pid untuk mengumpulkan baris mengikut ID bahagian dan HAVING COUNT(DISTINCT c2.sid) >= 2 untuk menapis kumpulan ini, mengekalkan hanya kumpulan yang mempunyai dua atau lebih ID pembekal yang berbeza. Kata kunci DISTINCT memastikan setiap pembekal dikira sekali sahaja, walaupun mereka membekalkan bahagian yang sama beberapa kali.

Ringkasnya, ingat untuk menggunakan HAVING dengan fungsi agregat dalam subkueri untuk menapis kumpulan baris dengan betul berdasarkan nilai agregat dalam MySQL. Perbezaan ini adalah kunci untuk menyelesaikan ralat "Penggunaan fungsi kumpulan tidak sah" dan mendapatkan semula data yang dikehendaki dengan tepat.

Atas ialah kandungan terperinci Bagaimana Menggunakan Fungsi GROUP dengan betul dalam Subkueri MySQL untuk Mencari Bahagian yang Dibekalkan oleh Berbilang Pembekal?. 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