Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle - SELECT DENSE_RANK OVER (ORDER BY, SUM, OVER et PARTITION BY)

Après de nombreux essais, je n'ai toujours pas compris s'il est possible de corriger l'ordre dans le DENSE_RANK() est OVER mais j'ai trouvé une solution entre les deux.

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

Ce n'est pas aussi bon que la solution que j'essayais mais c'est mieux que mon code de travail précédent. Ce que j'ai fait a été de déplacer le Sum(Sum(tbl1.qtd)) OVER (PARTITION BY tbl2.lot) hors du DENSE_RANK() puis ajoutez-le avec le nom qtd_lot .