sql >> Database teknologi >  >> RDS >> Oracle

Oracle - VÆLG DENSE_RANK OVER (ORDER BY, SUM, OVER og PARTITION BY)

Efter en masse forsøg har jeg stadig ikke fundet ud af, om det er muligt at rette ordren inde i DENSE_RANK() 's OVER men jeg fandt ud af en løsning imellem de to.

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

Den er ikke så god som den løsning, jeg prøvede, men den er bedre end min tidligere arbejdskode. Det, jeg gjorde, var at flytte Sum(Sum(tbl1.qtd)) OVER (PARTITION BY tbl2.lot) ud af DENSE_RANK() og tilføj det derefter med navnet qtd_lot .




  1. Kodningsproblem i AJAX

  2. Kan ikke uploade og gemme billedet til databasen ved at bruge php

  3. MySQL-indkøbsvognsstruktur

  4. Sådan angives den invariante kultur, når du bruger FORMAT() i SQL Server