sql >> Databasteknik >  >> RDS >> Oracle

Oracle - VÄLJ DENSE_RANK OVER (ORDER BY, SUM, OVER och PARTITION BY)

Efter mycket försök har jag fortfarande inte räknat ut om det är möjligt att fixa beställningen i DENSE_RANK() s OVER men jag hittade en lösning mellan de två.

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 är inte lika bra som den lösning jag försökte men den är bättre än min tidigare fungerande kod. Det jag gjorde var att flytta Sum(Sum(tbl1.qtd)) OVER (PARTITION BY tbl2.lot) ur DENSE_RANK() och lägg sedan till den med namnet qtd_lot .




  1. bulk ändra kolumntyper i MySQL

  2. Hur använder man kryssrutor för att ange sant (1) eller falskt (0) i mySQL OCH visa som markerat i php/html-form?

  3. SQL Server BULK INSERT från Linux

  4. Oracle :Är det möjligt att skapa en roll i en trigger?