У меня есть база данных, в которой я получаю лоты, дефекты и количества (из 2 таблиц).
После небольшого изменения имен и удаления некоторых фильтров, которые, как я убедился, были не важны для вопроса, мой текущийрабочий запрос выглядит следующим образом (с помощью этот ответ ):
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
Я пытаюсь улучшить запрос немного больше, и я получил это решение , чтобы оптимизировать его, это то, что мне было нужно, но я получаю сообщение об ошибке при объединении обоих ответов.
В моей голове должен быть следующий запрос:
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 '('.
(переведено).
Когда я удаляю деталь Sum(Sum(tbl1.qtd)) OVER (PARTITION BY tbl2.lot) DESC,
внутри SELECT DENSE_RANK() OVER(ORDER BY ...)
из запроса, который он выполняет и работает, за исключением того, что он не упорядочивает значения так, как мне нужно.
Я не уверен, что проблема может заключаться в том, что внутри другой есть OVER
.Я попытался разобраться, поменяв детали, и посмотреть, что произойдет, но не смог найти решение.