Oracle SQL: минус-выражение

Я запускаю этот индивидуальный запрос в своей среде отчетности программного обеспечения базы данных, и он хорошо работает. Однако я хочу иметь возможность взять этот запрос и вычесть его из того же запроса с table2.actionid, измененным на другое значение.

Контекст: 15 и 16 соответствуют различным идентификаторам действий пользователя. В этом случае 16 соответствует созданию файла, а 15 - удалению файла. В моем случае, чтобы найти правильное выходное значение, мне нужен вывод этого запроса для действия пользователя 16 МИНУС вывод этого же запроса для действия пользователя 15.
Также игнорируйте "date> =% 1", в моей среде есть отдельный раздел, где можно ввести эту дату.

Вот мои таблицы и соответствующие им столбцы для быстрого ознакомления:

Main Table (id)
Table 1 (defid, id, asubtype)
Table 2 (id, actionid, bsubtype, performerid)
Table 3 (userid)

Вот мой индивидуальный запрос:

SELECT decode(table1.defid,
2189, 'Category1',
3984, 'Category2',
5904, 'Category3',
6238, 'Category4',
6849, 'Category5',
'Unknown') "Category", table1.id "ID Number",
COUNT (table1.defid) as "Running Total"
FROM table1
INNER JOIN
maintable ON maintable.id = table1.id
INNER JOIN
table2 ON table2.id = maintable.id
INNER JOIN 
table3 ON table3.userid = table2.performerid
WHERE table2.actionid = 16
AND auditdate >= %1
AND table2.bsubtype = 0
AND table1.asubtype = -18
GROUP BY table1.defid, table1.id

Мой «Промежуточный итог», когда table2.actionid = 16 равен 2. Мой «Промежуточный итог», когда table2.actionid = 15 равен 1.

Создаются два файла, один удаляется. На выходе должны быть все файлы, которые были созданы, но не удалены. Итак, логически вывод оператора минус должен быть 1? Верно?

Однако, когда я использовал оператор Oracle MINUS (https://www.techonthenet.com/oracle/minus.php), мой текущий итог по-прежнему равен 2.

Что я делаю неправильно? Должен ли я вместо этого использовать какой-то подзапрос? Я выпил слишком много кофеина? Я упустил что-то простое? Любой ввод / совет были бы очень полезны :)

Это минус-запрос:

SELECT decode(table1.defid,
2189, 'Category1',
3984, 'Category2',
5904, 'Category3',
6238, 'Category4',
6849, 'Category5',
'Unknown') "Category", table1.id "ID Number",
COUNT (table1.defid) as "Running Total"
FROM table1
INNER JOIN
maintable ON maintable.id = table1.id
INNER JOIN
table2 ON table2.id = maintable.id
INNER JOIN
table3 ON table3.userid = table2.performerid
WHERE table2.actionid = 16
AND auditdate >= %1
AND table2.bsubtype = 0
AND table1.asubtype = -18
GROUP BY table1.defid, table1.id

MINUS

SELECT decode(table1.defid,
2189, 'Category1',
3984, 'Category2',
5904, 'Category3',
6238, 'Category4',
6849, 'Category5',
'Unknown') "Category", table1.id "ID Number",
COUNT (table1.defid) as "Running Total"
FROM table1
INNER JOIN
maintable ON maintable.id = table1.id
INNER JOIN
table2 ON table2.id = maintable.id
INNER JOIN
table3 ON table3.userid = table2.performerid
WHERE table2.actionid = 15
AND auditdate >= %1
AND table2.bsubtype = 0
AND table1.asubtype = -18
GROUP BY table1.defid, table1.id
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
257
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не совсем уверен, какого результата вы пытаетесь достичь, но MINUS - это операция установленный, то есть поиск записей в первом наборе результатов, которых нет во втором. Поэтому, если вы ищете оставшиеся COUNT, вам нужно присоединиться к этим наборам результатов и выполнить вычитание по беговым суммам вместо MINUS.

Спасибо! Это было очень полезно. Я попробую!

NBB 27.10.2018 03:13

Другие вопросы по теме