Simulasikan fungsi ANSI SQL RANK dalam MySQL
Dalam SQL, fungsi RANK digunakan untuk mengira kedudukan nilai yang diberikan dalam senarai tersusun. Untuk menentukan kedudukan berdasarkan jantina dan umur pelanggan, anda boleh menggunakan pertanyaan ANSI SQL berikut:
<code class="language-sql">SELECT RANK() OVER (PARTITION BY Gender ORDER BY Age) AS [Partition by Gender], FirstName, Age, Gender FROM Person</code>
Walau bagaimanapun, MySQL tidak mempunyai persamaan langsung dengan fungsi RANK yang disediakan dalam pertanyaan di atas. Berikut ialah cara lain untuk mencapai kedudukan yang diingini dalam MySQL:
Salah satu cara ialah menggunakan pembolehubah kedudukan, seperti ini:
<code class="language-sql">SELECT first_name, age, gender, @curRank := @curRank + 1 AS rank FROM person p, (SELECT @curRank := 0) r ORDER BY age;</code>
(SELECT @curRank := 0)
adalah untuk memulakan pembolehubah tanpa memerlukan arahan SET yang berasingan.
Pertimbangkan kes ujian di mana anda membuat jadual orang dan memasukkan nilai sampel:
<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>
Selepas melaksanakan pertanyaan MySQL, anda akan mendapat hasil berikut, yang meletakkan kedudukan pelanggan berdasarkan umur dalam kumpulan jantina masing-masing:
<code>+------------+------+--------+------+ | first_name | age | gender | rank | +------------+------+--------+------+ | Kathy | 18 | F | 1 | | Jane | 20 | F | 2 | | Nick | 22 | M | 3 | | Bob | 25 | M | 4 | | Anne | 25 | F | 5 | | Jack | 30 | M | 6 | | Bill | 32 | M | 7 | | Steve | 36 | M | 8 | +------------+------+--------+------+ 8 rows in set (0.02 sec)</code>
Dengan kaedah ini, anda boleh meletakkan kedudukan pelanggan dengan berkesan dalam MySQL berdasarkan kriteria yang ditetapkan walaupun MySQL tidak mempunyai fungsi RANK terbina dalam.
Atas ialah kandungan terperinci Bagaimana untuk Meniru Fungsi ANSI SQL RANK dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!