Mengira Kejadian Berturut-turut Nilai dalam Jadual
Dalam pangkalan data dengan jadual yang mengandungi lajur nilai, menentukan kiraan kejadian berturut-turut daripada setiap nilai boleh menjadi tugas yang berguna untuk pelbagai senario analisis data. Soalan ini meneroka cabaran untuk mencapai kiraan ini menggunakan teknik SQL yang cekap.
Data yang disediakan terdiri daripada jadual dengan lajur Id dan lajur Nama yang mengandungi nilai 'A', 'B' dan 'C'. Objektifnya adalah untuk mengira kejadian berturut-turut bagi nilai-nilai ini dalam lajur Nama dan membentangkan keputusan seperti berikut:
+------+------------+ | Name | Repetition | +------+------------+ | A | 2 | | B | 4 | | C | 1 | | B | 2 | +------+------------+
Satu pendekatan yang dicuba ialah menggunakan fungsi COUNT() ke atas partition mengikut Nama, tetapi ini menghasilkan keputusan yang tidak betul. Untuk menangani perkara ini, kaedah alternatif yang memanfaatkan nombor baris boleh digunakan.
Coretan kod berikut membentangkan penyelesaian yang lebih baik:
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;
Pendekatan ini menggunakan perbezaan antara dua nombor baris untuk mengenal pasti berturut-turut kejadian. Dengan menolak nombor baris dalam setiap kumpulan daripada nombor baris keseluruhan, pengecam kumpulan unik dicipta untuk setiap jujukan nilai berturut-turut. Fungsi COUNT() kemudiannya digunakan pada kumpulan ini, memberikan kiraan yang diingini untuk setiap kejadian nilai berturut-turut.
Atas ialah kandungan terperinci Bagaimana untuk Mengira Kejadian Nilai Berturut-turut dengan Cekap dalam Jadual SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!