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

Oracle - CHỌN DENSE_RANK OVER (ORDER BY, SUM, OVER và PARTITION BY)

Sau rất nhiều lần thử, tôi vẫn chưa tìm ra liệu có thể sửa đơn hàng bên trong DENSE_RANK() hay không của OVER nhưng tôi đã tìm ra giải pháp giữa hai điều đó.

SELECT lot, def, qtd
FROM (
  SELECT DENSE_RANK() OVER (ORDER BY qtd_lot DESC) rnk, lot, def, qtd
  FROM (
    SELECT tbl2.lot lot, tbl1.def def, Sum(tbl1.qtd) qtd, Sum(Sum(tbl1.qtd)) OVER (PARTITION BY tbl2.lot) qtd_lot
    FROM db.tbl1 tbl1, db.tbl2 tbl2
    WHERE tbl2.key = tbl1.key
    GROUP BY tbl2.lot, tbl1.def
  )
)
WHERE rnk <= 10
ORDER BY rnk, qtd DESC, lot, def

Nó không tốt bằng giải pháp mà tôi đang thử nhưng nó tốt hơn so với mã làm việc trước đây của tôi. Những gì tôi đã làm là di chuyển Sum(Sum(tbl1.qtd)) OVER (PARTITION BY tbl2.lot) ra khỏi DENSE_RANK() và sau đó thêm nó với tên qtd_lot .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách đổi tên khóa chính trong Oracle để nó có thể được sử dụng lại

  2. Oracle trích xuất số biến từ chuỗi

  3. SQL hàng thành cột

  4. Làm cách nào để sử dụng các biến trong Oracle SQL Developer?

  5. Làm cách nào để tạo nhiều kết nối giản đồ bằng Java?