sql >> Databáze >  >> RDS >> Oracle

Oracle – SELECT DENSE_RANK OVER (ORDER BY, SUM, OVER a PARTITION BY)

Po mnoha pokusech jsem stále nepřišel na to, zda je možné opravit pořadí uvnitř DENSE_RANK() 's OVER ale našel jsem řešení mezi těmito dvěma.

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

Není to tak dobré jako řešení, které jsem zkoušel, ale je lepší než můj předchozí pracovní kód. Co jsem udělal, bylo přesunout Sum(Sum(tbl1.qtd)) OVER (PARTITION BY tbl2.lot) z DENSE_RANK() a poté jej přidejte pod názvem qtd_lot .




  1. filtrování výsledků podle dvou vybraných možností

  2. Jak převést velká písmena na malá v MySQL

  3. Jak opravit 508 Resource Limit je dosažen v PHP MySQL

  4. Vložte pomocí LEFT JOIN a INNER JOIN