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

Hàm nhóm SQL được lồng quá sâu

Một cách để làm điều này là lồng truy vấn của bạn và sau đó chọn hàng đầu tiên trong đầu ra:

select C_SE_ID, cnt
from (select CS.C_SE_ID, count(*) as cnt
      from COURSE_SECTION CS join
           ENROLLMENT E
           on CS.C_SE_ID=E.C_SE_ID join
           LOCATION L
           on CS.LOC_ID=L.LOC_ID
      where L.BLDG_CODE='DBW'
      GROUP BY CS.C_SE_ID
      order by count(*) desc
     ) t
where rownum = 1

Lưu ý rằng tôi đã cập nhật cú pháp tham gia lên phiên bản hiện đại hơn bằng cách sử dụng on thay vì where .

Nếu bạn muốn tất cả giá trị tối thiểu (và có nhiều hơn một), sau đó tôi sẽ sử dụng các hàm phân tích. Đó là một ý tưởng rất giống với truy vấn ban đầu của bạn:

select *
from (select CS.C_SE_ID, count(*) as cnt,
             max(count(*)) over (partition by cs.c_se_id) as maxcnt
      from COURSE_SECTION CS join
           ENROLLMENT E
           on CS.C_SE_ID=E.C_SE_ID join
           LOCATION L
           on CS.LOC_ID=L.LOC_ID
      where L.BLDG_CODE='DBW'
      GROUP BY CS.C_SE_ID
      order by count(*) desc
     ) t
where cnt = maxcnt;

Hãy thử điều này thay vì truy vấn ban đầu của bạn:

SELECT E.S_ID
FROM ENROLLMENT E
where E.C_SE_ID in (select C_SE_ID
                    from (select CS.C_SE_ID, count(*) as cnt,
                                 max(count(*)) over (partition by cs.c_se_id) as maxcnt
                          from ENROLLMENT E
                               LOCATION L
                               on CS.LOC_ID=L.LOC_ID
                          where L.BLDG_CODE='DBW'
                          GROUP BY e.C_SE_ID
                         ) t
                    where cnt = maxcnt)
                   );

Ngoài việc sửa các phép nối, tôi cũng đã xóa tất cả các tham chiếu đến course_section . Bảng này dường như không được sử dụng (trừ khi để lọc kết quả) và việc xóa nó đi sẽ đồng nghĩa với các truy vấn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tập dữ liệu jdbc có lưu trữ tất cả các hàng trong bộ nhớ jvm không

  2. Truy vấn Oracle để lấy ID giao dịch đầu tiên dựa trên giao dịch gửi đi đã sử dụng

  3. java.lang.UnsatisfiedLinkError:không có ocijdbc11 trong java. library.path

  4. Đặt lại Trình tự Oracle để có MIN VALUE =1 và số STARTING từ 1

  5. Kiểm tra mật khẩu của người dùng có hợp lệ hay không trong plsql