Rumah >pangkalan data >tutorial mysql >Bagaimana Mengira Kejadian Nilai Berturut-turut dalam Lajur Pangkalan Data?

Bagaimana Mengira Kejadian Nilai Berturut-turut dalam Lajur Pangkalan Data?

Patricia Arquette
Patricia Arquetteasal
2025-01-05 15:16:43757semak imbas

How to Count Consecutive Value Occurrences in a Database Column?

Cara Mengira Kejadian Berturut-turut dalam Lajur Jadual

Apabila bekerja dengan data dalam jadual, adalah berguna untuk mengira bilangan kali nilai berlaku berturut-turut dalam lajur tertentu. Contohnya, jika jadual mengandungi lajur yang mewakili nama pekerja, anda mungkin ingin mengetahui bilangan kali nama pekerja yang sama muncul dalam satu baris.

Masalah

Pertimbangkan jadual berikut:

create table #t (Id int, Name char)

insert into #t values
(1, 'A'),
(2, 'A'),
(3, 'B'),
(4, 'B'),
(5, 'B'),
(6, 'B'),
(7, 'C'),
(8, 'B'),
(9, 'B')

Matlamatnya adalah untuk mengira bilangan kejadian berturut-turut bagi setiap nilai dalam Lajur "Nama". Output yang dikehendaki ialah:

Name Repetition
A 2
B 4
C 1
B 2

Penyelesaian

Satu pendekatan untuk menyelesaikan masalah ini ialah menggunakan konsep nombor baris dan kemudian mengira perbezaan antara mereka untuk mengenal pasti kejadian berturut-turut. Pertanyaan berikut menunjukkan pendekatan ini:

select name, count(*) 
from (select t.*,
             (row_number() over (order by id) -
              row_number() over (partition by name order by id)
             ) as grp
      from t
     ) t
group by grp, name;

Penjelasan

Subkueri dalam pertanyaan:

(select t.*,
             (row_number() over (order by id) -
              row_number() over (partition by name order by id)
             ) as grp
      from t
     )

mengira nombor baris bagi setiap baris dalam jadual 't'. Fungsi row_number() memberikan nombor berjujukan kepada setiap baris, manakala partition by clause memastikan nombor baris ditetapkan semula untuk setiap nilai yang berbeza dalam lajur "Nama". Ini menghasilkan lajur 'grp', yang menunjukkan kumpulan kejadian berturut-turut untuk setiap gabungan "Nama" dan "Id".

Pertanyaan luar kemudian mengumpulkan hasil mengikut lajur 'grp' dan mengira bilangan kejadian untuk setiap gabungan 'grp' dan 'Nama'. Ini memberikan hasil akhir, yang mengira kejadian berturut-turut bagi setiap nilai dalam lajur "Nama".

Dengan menggunakan perbezaan antara nombor baris, pendekatan ini dengan tepat menentukan kejadian berturut-turut bagi nilai dalam lajur yang ditentukan dan menghasilkan output yang diingini.

Atas ialah kandungan terperinci Bagaimana Mengira Kejadian Nilai Berturut-turut dalam Lajur Pangkalan Data?. 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