Я выполняю левое соединение с другой таблицей в подзапросе, и столбец комиссионных, который я хочу вернуть из левого соединения, приносит только одно значение для всего столбца комиссионных, что неверно (см. Первый результат запроса ниже). Теперь, если я выполню левое соединение вне таблицы A (запрос 2), я получу желаемые результаты (см. Второй набор результатов). Вопрос в том, почему левое соединение не работает в таблице A в первом запросе.
Я пробовал левое соединение вне подзапроса / таблицы A (запрос 2), и оно работает нормально, но я хочу узнатьпочему левое соединение не работает в таблице A.
Ниже приведен запрос (запрос 1), в котором указаны повторяющиеся значения в столбце комиссии
Position_A1 table
Sector Short_Side
------------------------
Engineering -2
Financial -5
Industry -10
Corporate -36
Energy -52
Financial -26
Order table
Sector Commission
------------------------
Engineering 10
Financial 100
Industry 36
Corporate 91
Energy 10
Financial 25
Запрос 1
SELECT *
FROM
(SELECT POS.SECTOR,
SUM(ABS(POS.SHORT_SIDE)) AS Short_Expo,
COM.COMMISSION
FROM Position_A1 POS
LEFT JOIN (SELECT SECTOR, sum(COMMISSION) AS COMMISSION
FROM ORDER
WHERE TRADE_DATE = TO_DATE('2019-11-01','YYYY-MM-DD')
GROUP BY SECTOR
)COM
ON POS.SECTOR = COM.SECTOR
WHERE TRADE_DATE = TO_DATE('2019-11-01','YYYY-MM-DD')
GROUP BY SECTOR ) A
Однако, если я попробую следующее, я получу правильные результаты в столбце комиссии.
Запрос 2
SELECT A.*, COM.COMMISSION
FROM
(SELECT POS.SECTOR,
SUM(ABS(POS.SHORT_SIDE)) AS Short_Expo
FROM Position_A1 POS
WHERE TRADE_DATE = TO_DATE('2019-11-01','YYYY-MM-DD')
GROUP BY SECTOR ) A
LEFT JOIN (SELECT SECTOR, sum(COMMISSION) AS COMMISSION
FROM ORDER
WHERE TRADE_DATE = TO_DATE('2019-11-01','YYYY-MM-DD')
GROUP BY SECTOR
)COM
ON POS.SECTOR = COM.SECTOR
Согласно первому запросу результат Iget is:
Sector Short_Expo Commission
Energy 256 125
Industry 236 125
Financial 125 125
В соответствии со вторым запросом результат, который я получаю (это правильно):
Sector Short_Expo Commission
Energy 256 128
Industry 236 325
Financial 125 186
Вопрос в том, почему запрос один не дает идеальный результаттогда как запрос 2. Что я делаю неправильно в первом запросе, который приводит к дублированию комиссии?
При использовании первого кажется, что комиссия только для одного сектора (Финансовый) возвращается для всех секторов.