Я выполняю левое соединение с другой таблицей в подзапросе, и столбец комиссии, который я хочу вернуть из левого соединения, дает только одно значение для всего столбца комиссии, что неверно (см. первый результат запроса ниже). Теперь, если я выполняю левое соединение за пределами таблицы 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
В соответствии с первым запросом я получаю следующий результат:
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. Что я делаю неправильно в первом запросе, который приводит к дублированию комиссии?
При использовании первого кажется, что комиссия только для одного сектора (Финансового) возвращается для всех секторов.