Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Meniru Fungsi ANSI SQL RANK dalam MySQL?

Bagaimana untuk Meniru Fungsi ANSI SQL RANK dalam MySQL?

Barbara Streisand
Barbara Streisandasal
2025-01-24 05:02:08496semak imbas

How to Replicate the ANSI SQL RANK Function in MySQL?

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>
Tujuan bahagian

(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!

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