sql >> Base de Datos >  >> RDS >> Oracle

Oracle:SELECCIONE DENSE_RANK OVER (ORDENAR POR, SUMA, OVER y PARTICIÓN POR)

Después de mucho intentarlo, todavía no he descubierto si es posible arreglar el orden dentro del DENSE_RANK() de OVER pero encontré una solución entre los dos.

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

No es tan buena como la solución que estaba probando, pero es mejor que mi código de trabajo anterior. Lo que hice fue mover Sum(Sum(tbl1.qtd)) OVER (PARTITION BY tbl2.lot) fuera del DENSE_RANK() y luego añádelo con el nombre qtd_lot .