Pendekatan MySQL terhadap Kedudukan Data
Kedudukan data adalah penting untuk analisis data. Walaupun MySQL tidak secara langsung menyokong fungsi ANSI RANK()
, ia menawarkan kaedah alternatif untuk mencapai hasil yang serupa. Artikel ini meneroka cara MySQL meniru kedudukan menggunakan pembolehubah yang ditentukan pengguna.
Untuk meniru kefungsian RANK()
—contohnya, meletakkan kedudukan pelanggan mengikut umur dalam kumpulan jantina mereka—MySQL memanfaatkan penugasan pembolehubah dalam pertanyaan SQL. Pertanyaan berikut menunjukkan teknik ini:
<code class="language-sql">SELECT first_name, age, gender, @curRank := @curRank + 1 AS rank FROM person p, (SELECT @curRank := 0) r ORDER BY gender, age;</code>
Pertanyaan ini dengan cekap memulakan pembolehubah kedudukan @curRank
dalam subkueri, menghapuskan keperluan untuk pernyataan SET
yang berasingan.
Contoh Ilustrasi:
Mari kita pertimbangkan contoh person
jadual:
<code class="language-sql">CREATE TABLE person (id int, first_name varchar(20), age int, gender char(1)); INSERT INTO person VALUES (1, 'Bob', 25, 'M'); INSERT INTO person VALUES (2, 'Jane', 20, 'F'); INSERT INTO person VALUES (3, 'Jack', 30, 'M'); INSERT INTO person VALUES (4, 'Bill', 32, 'M'); INSERT INTO person VALUES (5, 'Nick', 22, 'M'); INSERT INTO person VALUES (6, 'Kathy', 18, 'F'); INSERT INTO person VALUES (7, 'Steve', 36, 'M'); INSERT INTO person VALUES (8, 'Anne', 25, 'F');</code>
Melaksanakan pertanyaan di atas terhadap jadual ini menghasilkan output terperingkat:
<code>+------------+------+--------+------+ | first_name | age | gender | rank | +------------+------+--------+------+ | Kathy | 18 | F | 1 | | Jane | 20 | F | 2 | | Anne | 25 | F | 3 | | Bob | 25 | M | 4 | | Nick | 22 | M | 5 | | Jack | 30 | M | 6 | | Bill | 32 | M | 7 | | Steve | 36 | M | 8 | +------------+------+--------+------+</code>
Klausa ORDER BY gender, age
memastikan kedudukan dilakukan secara berasingan untuk setiap jantina, kemudian mengikut umur dalam setiap jantina. Ini secara berkesan mencerminkan kelakuan fungsi ANSI RANK()
. Ambil perhatian bahawa kaedah ini memberikan pangkat berturut-turut, walaupun terdapat hubungan umur. Untuk mengendalikan ikatan secara berbeza, teknik yang lebih kompleks akan diperlukan.
Atas ialah kandungan terperinci Bagaimanakah MySQL Meniru Fungsi ANSI RANK() untuk Pesanan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!