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

Oracle ListaGG, 3 giá trị thường gặp nhất, được cho trong một cột, được nhóm theo ID

Đây là dữ liệu mẫu

create table VET as
select 
rownum+1 Visit_Id, 
mod(rownum+1,5) Animal_id, 
cast(NULL as number)  Veterinarian_id, 
trunc(10*dbms_random.value)+1 Sickness_code
from dual
connect by level <=100;

Truy vấn

về cơ bản các truy vấn con thực hiện như sau:

đếm tổng hợp và tính số lượng cúm (trong tất cả hồ sơ của động vật)

tính RANK (nếu bạn chỉ cần thực sự 3 bản ghi, hãy sử dụng ROW_NUMBER - xem thảo luận bên dưới)

Lọc 3 RANK hàng đầu

LISTAGTổng hợp kết quả

with agg as (
select Animal_id, Sickness_code, count(*) cnt,
sum(case when SICKNESS_CODE = 5 then 1 else 0 end) over (partition by animal_id) as cnt_flu
from vet
group by Animal_id, Sickness_code
), agg2 as (
select ANIMAL_ID, SICKNESS_CODE, CNT, cnt_flu,
rank() OVER (PARTITION BY ANIMAL_ID ORDER BY cnt DESC) rnk
from agg
), agg3 as (
select ANIMAL_ID, SICKNESS_CODE, CNT, CNT_FLU, RNK
from agg2
where rnk <= 3
)
select 
ANIMAL_ID, max(CNT_FLU) CNT_FLU,
LISTAGG(SICKNESS_CODE||'('||CNT||')', ', ') WITHIN GROUP (ORDER BY rnk)  as   cnt_lts
from agg3
group by ANIMAL_ID 
order by 1;

cho

 ANIMAL_ID    CNT_FLU CNT_LTS                                     
---------- ---------- ---------------------------------------------
         0          1 6(5), 1(4), 9(3)                              
         1          1 1(5), 3(4), 2(3), 8(3)                        
         2          0 1(5), 10(3), 4(3), 6(3), 7(3)                 
         3          1 5(4), 2(3), 4(3), 7(3)                        
         4          1 2(5), 10(4), 1(2), 3(2), 5(2), 7(2), 8(2) 

Tôi cố tình hiển thị Sickness_code (số lượt truy cập) để minh chứng rằng top 3 có thể có mối quan hệ mà bạn nên xử lý. Kiểm tra hàm RANK. Sử dụng ROW_NUMBER không xác định trong trường hợp này.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kết nối oracle trong ứng dụng Android

  2. Cách giải quyết ORA-00939:quá nhiều đối số cho lỗi hàm?

  3. Điều chỉnh câu lệnh SQL trong nhà phát triển SQL

  4. cách tốt nhất để di chuyển ứng dụng biểu mẫu windows từ máy chủ sql sang oracle

  5. tính năng nào để sử dụng trong phiên bản tiêu chuẩn oracle giống như tính năng phân vùng trong phiên bản doanh nghiệp oracle