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
Lepaskan: 2025-01-05 15:40:40
asal
202 orang telah melayarinya

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;
Salin selepas log masuk

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 |
+------+------------+
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan