Заказать запрос Oracle по сумме без выбора суммы - PullRequest
1 голос
/ 02 июля 2019

У меня есть таблица, похожая на следующую:

 lot   |  defect  |  quantity
-------+----------+-----------
 lot1  |  c       |  7
 lot1  |  c       |  2
 lot3  |  e       |  5
 lot3  |  b       |  9
 lot3  |  a       |  5
 lot2  |  d       |  4
 lot4  |  c       |  12
 ...   |  ...     |  ...

Я хочу суммировать количества, в которых партия и дефект равны между строками, а затем упорядочить лот по сумме его количества (lot3 = 9 + 5 + 5 = 19, lot4 = 12, lot1 = 7 + 2 = 9, lot2 = 4), затем количество (внутри каждого лота), а затем дефект.

Так что должно получиться следующее:

 lot   |  defect  |  SUM(quantity)
-------+----------+----------------
 lot3  |  b       |  9
 lot3  |  a       |  5
 lot3  |  e       |  5
 lot4  |  c       |  12
 lot1  |  c       |  9
 lot2  |  d       |  4
 ...   |  ...     |  ...

Самый близкий мне вопрос - следующий запрос:

SELECT lot, defect, SUM(quantity)
FROM table
GROUP BY lot, defect
ORDER BY SUM(quantity), lot, defect

Что приводит к следующему:

 lot   |  defect  |  SUM(quantity)
-------+----------+----------------
 lot4  |  c       |  12
 lot1  |  c       |  9
 lot3  |  b       |  9
 lot3  |  a       |  5
 lot3  |  e       |  5
 lot2  |  d       |  4
 ...   |  ...     |  ...

1 Ответ

3 голосов
/ 02 июля 2019

Похоже, ваш вопрос касается порядка результатов. Решение заключается в использовании оконных функций в ORDER BY:

SELECT lot, defect, SUM(quantity)
FROM table
GROUP BY lot, defect
ORDER BY SUM(SUM(quantity)) OVER (PARTITION BY lot) DESC,
         lot, SUM(quantity) DESC, defect;
...