Rumah >pangkalan data >tutorial mysql >Bagaimana Mengira Kejadian Berturut-turut Nilai dalam Jadual SQL?

Bagaimana Mengira Kejadian Berturut-turut Nilai dalam Jadual SQL?

Barbara Streisand
Barbara Streisandasal
2025-01-05 15:40:40142semak imbas

How to Count Consecutive Occurrences of Values in a SQL Table?

Nilai Pengelompokan berdasarkan Kejadian Berturut-turut

Untuk mengira kejadian berturut-turut bagi nilai dalam jadual, pendekatan yang berkesan ialah mengira perbezaan baris nombor.

Pertimbangkan perkara berikut pertanyaan:

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;

Subkueri ini menjana dua nombor baris untuk setiap baris:

  • nombor_baris() atas (urutan mengikut id): Nombor berjujukan berdasarkan susunan baris keseluruhan.
  • row_number() over (partition by name order by id): Nombor berjujukan khusus untuk setiap unik nama.

Dengan menolak dua nombor baris, kami mencipta pengecam "kumpulan" (grp) yang bertambah apabila nama bertukar atau terdapat kejadian berturut-turut yang berbeza dengan nama yang sama.

Pertanyaan terakhir kemudian mengumpulkan baris berdasarkan grp ini dan mengira kejadian setiap nama dalam setiap kumpulan. Ini menghasilkan kiraan kejadian berturut-turut yang diingini:

+------+------------+
| Name | Repetition |
+------+------------+
| A    |          2 |
| B    |          4 |
| C    |          1 |
| B    |          2 |
+------+------------+

Pendekatan ini menyediakan cara yang cekap untuk mengenal pasti nilai berturut-turut dalam jadual dengan memanfaatkan perbezaan dalam nombor baris sebagai mekanisme pengumpulan.

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