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
.