经过大量的努力我还没有弄清楚是否有可能解决内部的顺序DENSE_RANK()
的OVER
,但我却发现了一个解决方案在两者之间。
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
它不像我尝试的解决方案那样好,但是比我以前的工作代码要好。我所做的是将Sum(Sum(tbl1.qtd)) OVER (PARTITION BY tbl2.lot)
移出,DENSE_RANK()
然后添加名称qtd_lot
。