Nano Hash - криптовалюты, майнинг, программирование

Левое соединение возвращает одно значение для всего столбца

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

При использовании первого кажется, что комиссия только для одного сектора (Финансового) возвращается для всех секторов.

04.11.2019

  • Трудно уследить за тем, что вы намереваетесь сделать, и за тем, что происходит на самом деле. Задавая вопрос, имейте в виду, что никто другой не может выполнять эти запросы. Это поможет, если вы удалите из своих запросов все, что не имеет прямого отношения к вопросу (trade date? rating? c_type?); Кроме того, вы захотите включить несколько репрезентативных выборочных данных, показывающих ваш вклад, то, что вы на самом деле получаете, и то, что вы ожидаете получить. 04.11.2019
  • привет, извиняюсь, я внес изменения, надеюсь, это поможет 04.11.2019
  • В ваших запросах нет ничего плохого. В вашем первом запросе группировка по секторам сначала в подзапросе, а затем снова выполнение той же группировки во внешнем запросе очень странно, но могут быть случаи, когда это допустимо. Мы не можем на самом деле ответить, почему вы не получаете ожидаемых результатов, если вы не покажете, как выглядит ваша модель данных. Что в Position_A1? Что в ORDER? В любом случае ваш второй запрос выглядит намного чище, чем первый. Если это показывает ожидаемые результаты, в чем проблема? 04.11.2019
  • Ваш первый запрос действительно тот, который вы использовали? Я ожидаю, что это будет ошибкой, так как ваш столбец com.commission не входит в группу. 04.11.2019

Ответы:


1

В первом запросе предложение WHERE во внешнем запросе (WHERE TRADE_DATE = TO_DATE('2019-11-01', 'YYYY-MM-DD')) превращает LEFT JOIN в INNER JOIN, потому что несовпадающие значения — это NULL, и они не совпадают.

Обычное решение — включить фильтрацию последующих таблиц в предложение ON.

04.11.2019
  • Гордон, предложение where в таблице COM или таблице A? 04.11.2019
  • @Али_М. . . Я уточнила. 04.11.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..