【发布时间】:2019-07-02 15:08:00
【问题描述】:
我有一个数据库,我可以在其中获取批次、缺陷和数量(来自 2 个表)。
稍微更改名称并删除一些我确定对问题不重要的过滤器后,我当前的工作查询如下所示(在this answer 的帮助下):
WITH subquery AS (
SELECT * FROM (
SELECT tbl2.lot
FROM db.tbl1 tbl1, db.tbl2 tbl2
WHERE tbl2.key = tbl1.key
GROUP BY tbl2.lot
ORDER BY Sum(tbl1.qtd) DESC, tbl2.lot
) WHERE ROWNUM <= 10
) SELECT tbl2.lot, tbl1.defect, tbl1.desc, Sum(tbl1.qtd)
FROM db.tbl1 tbl1, db.tbl2 tbl2, subquery
WHERE tbl2.lot = subquery.lot
AND tbl2.key = tbl1.key
GROUP BY tbl2.lot, tbl1.defect, tbl1.desc
ORDER BY Sum(Sum(tbl1.qtd)) OVER (PARTITION BY tbl2.lot) DESC, Sum(tbl1.qtd) DESC, tbl2.lot, tbl1.defect, tbl1.desc
我正在尝试进一步改进查询,我得到了this solution 来优化它,这是我所需要的,但是在结合两个答案时出现错误。
在我看来,解决方案应该是以下查询:
SELECT *
FROM (
SELECT DENSE_RANK() OVER (ORDER BY Sum(Sum(tbl1.qtd)) OVER (PARTITION BY tbl2.lot) DESC, Sum(tbl1.qtd) DESC, tbl2.lot, tbl1.defect, tbl1.desc) rnk, tbl2.lot, tbl1.defect, tbl1.desc, Sum(tbl1.qtd)
FROM db.tbl1 tbl1, db.tbl2 tbl2
WHERE tbl2.key = tbl1.key
GROUP BY tbl2.lot, tbl1.defect, tbl1.desc
ORDER BY Sum(Sum(tbl1.qtd)) OVER (PARTITION BY tbl2.lot) DESC, Sum(tbl1.qtd) DESC, tbl2.lot, tbl1.defect, tbl1.desc
)
WHERE rnk <= 10
ORDER BY rnk
但我收到错误 It was not possible to add the table '('.(已翻译)。
当我从查询中删除 SELECT DENSE_RANK() OVER(ORDER BY ...) 中的 Sum(Sum(tbl1.qtd)) OVER (PARTITION BY tbl2.lot) DESC, 部分时,它运行并工作,但它没有按照我需要的方式对值进行排序。
我不确定问题是否可能出在另一个 OVER 内。我试图通过更换零件来弄清楚会发生什么,但找不到解决方案。
【问题讨论】: