Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menjana Nombor Baris Dalam Kumpulan dalam MySQL?

Bagaimana untuk Menjana Nombor Baris Dalam Kumpulan dalam MySQL?

DDD
DDDasal
2024-11-11 17:45:021006semak imbas

How to Generate Row Numbers Within Groups in MySQL?

Nombor Baris dalam Kumpulan dalam MySQL

Masalah:

Hasilkan pertanyaan MySQL untuk menjana nombor baris bagi setiap kumpulan rekod berdasarkan dua medan, seperti crew_id dan type. Nombor baris hendaklah ditetapkan semula untuk setiap gabungan crew_id dan jenis baharu.

Data Contoh:

id   crew_id   amount    type
 1      4       1000      AUB
 2      4       1500      AUB
 3      5       8000      CA
 4      4       1000      CA
 5      5       1000      AUB
 6      6       3000      AUB
 7      4       2000      CA
 8      6       3500      AUB
 9      4       5000      AUB
 10     5       9000      CA
 11     5       1000      CA

Output yang Diingini:

id    crew_id   amount   type    row_number
 1      4       1000      AUB        1    
 2      4       1500      AUB        2 
 9      4       5000      AUB        3
 4      4       1000      CA         1
 7      4       2000      CA         2
 5      5       1000      AUB        1
 3      5       8000      CA         1
 10     5       9000      CA         2
 11     5       1000      CA         3
 6      6       3000      AUB        1
 6      6       3000      AUB        2

Penyelesaian:

Kepada mencapai nombor baris yang dikehendaki, kita boleh menggunakan gabungan subkueri dan pernyataan KES:

SELECT    id,
          crew_id,
          amount,
          type,
         ( 
            CASE type 
            WHEN @curType 
            THEN @curRow := @curRow + 1 
            ELSE @curRow := 1 AND @curType := type END
          ) + 1 AS rank
FROM      Table1 p,
          (SELECT @curRow := 0, @curType := '') r
ORDER BY  crew_id,type asc;

Dalam pertanyaan ini:

  • Subkueri (PILIH @curRow := 0 , @curType := '') r memulakan dua pembolehubah yang ditentukan pengguna: @curRow kepada 0 dan @curType kepada kosong rentetan.
  • Pernyataan CASE dalam pertanyaan SELECT luar membandingkan lajur jenis dengan @curType untuk menentukan sama ada baris semasa tergolong dalam kumpulan yang sama.

    • Jika jenis sama @curType, @curRow ditambah sebanyak 1.
    • Jika jenis berbeza daripada @curType, @curRow ditetapkan semula kepada 1 dan @curType dikemas kini kepada nilai jenis semasa.
  • Nilai yang dikira kemudiannya ditambah kepada 1 untuk menghasilkan nombor baris.
  • Set keputusan dipesan oleh crew_id dan taipkan tertib menaik.

Atas ialah kandungan terperinci Bagaimana untuk Menjana Nombor Baris Dalam Kumpulan 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