Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm thế nào để đếm các bản sao liên tiếp trong một bảng?

Nó có thể được thực hiện với phương pháp Tabibitosan. Chạy cái này để hiểu nó:

with a as(
select 1 slno, 'A' pg from dual union all
select 2 slno, 'A' pg from dual union all
select 3 slno, 'B' pg from dual union all
select 4 slno, 'A' pg from dual union all
select 5 slno, 'A' pg from dual union all
select 6 slno, 'A' pg from dual 
)
select slno, pg, newgrp, sum(newgrp) over (order by slno) grp
from( 
    select slno, 
           pg, 
           case when pg <> nvl(lag(pg) over (order by slno),1) then 1 else 0 end newgrp
    from a
    );

Newgrp có nghĩa là một nhóm mới được tìm thấy.

Kết quả:

SLNO PG NEWGRP GRP
1    A  1      1
2    A  0      1
3    B  1      2
4    A  1      3
5    A  0      3
6    A  0      3

Bây giờ, chỉ cần sử dụng nhóm theo số lượng, để tìm nhóm có số lần xuất hiện tối đa:

with a as(
select 1 slno, 'A' pg from dual union all
select 2 slno, 'A' pg from dual union all
select 3 slno, 'B' pg from dual union all
select 4 slno, 'A' pg from dual union all
select 5 slno, 'A' pg from dual union all
select 6 slno, 'A' pg from dual 
),
b as(
select slno, pg, newgrp, sum(newgrp) over (order by slno) grp
from( 
    select slno, pg, case when pg <> nvl(lag(pg) over (order by slno),1) then 1 else 0 end newgrp
    from a
    )
)
select max(cnt)
from (
    select grp, count(*) cnt
    from b
    group by grp
    );


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL:Trích xuất tuần trong năm từ ngày đưa ra kết quả ngẫu nhiên

  2. Chọn giá trị nhỏ nhất thứ hai trong Oracle

  3. Hàm NLS_LOWER () trong Oracle

  4. Sự khác biệt giữa Hàm bảng và Hàm Pipelined?

  5. SQL - Cách chọn hàng có cột có giá trị lớn nhất (+ nhóm theo)