Oracle
 sql >> Datenbank >  >> RDS >> Oracle

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

Nach vielen Versuchen habe ich immer noch nicht herausgefunden, ob es möglich ist, die Reihenfolge innerhalb des DENSE_RANK() zu korrigieren ist OVER aber ich habe zwischen den beiden eine Lösung gefunden.

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

Es ist nicht so gut wie die Lösung, die ich versucht habe, aber es ist besser als mein vorheriger Arbeitscode. Ich habe den Sum(Sum(tbl1.qtd)) OVER (PARTITION BY tbl2.lot) aus DENSE_RANK() und fügen Sie es dann mit dem Namen qtd_lot hinzu .