Как объединить операторы GROUP BY и JOIN в MySQL? - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь объединить запрос, который я выполнял для одной таблицы, с несколькими столбцами в другой таблице.Запрос, который я выполнил, вычисляет сумму чего-то для меня следующим образом:

SELECT security.Loan_id
     , SUM(security.SecMktValue) AS TotalSecMktValue
  FROM security 
 GROUP 
    BY Loan_id
 ORDER 
    BY loan_id ASC;

Затем я попытался объединить этот запрос со столбцами из другой таблицы с помощью:

SELECT loans.Loan_id, loans.TotalLoanAmt
FROM loans
JOIN(SELECT SUM(security.SecMktValue) AS TotalSecMktValue,security.Loan_id
FROM security
GROUP BY Loan_id ASC)
ON loans.Loan_id = security.Loan_id;

Однако это незапустить, как он говорит, что есть ошибка с моим синтаксисом SQL, хотя ничего не подчеркнуто красным.Кто-нибудь знает, почему это так?

Ответы [ 3 ]

1 голос
/ 13 июня 2019

Если я правильно понял, это должно сработать :)

SELECT security.Loan_id,SUM(security.SecMktValue) AS TotalSecMktValue
  FROM security security
  JOIN loans loan 
  ON loans.Loan_id = security.Loan_id
  GROUP BY Loan_id ASC
0 голосов
/ 13 июня 2019

MySQL требует, чтобы псевдоним был назначен для производной таблицы (т. Е. Имя корреляции, связанное со встроенным представлением). Квалификатор security находится вне области видимости вне встроенного представления, т. Е. Недопустимая ссылка во внешнем запросе.)

Вот пример, присваивающий псевдоним t производной таблице. Обратите внимание, что во внешнем запросе ссылки на столбцы из встроенного представления определяются как t.

SELECT l.loan_id
     , l.totalloanamt
     , t.totalsecmktvalue
  FROM loans l
  LEFT
  JOIN ( 
         SELECT s.loan_id
              , SUM(s.secmktvalue) AS totalsecmktvalue
           FROM security s
          GROUP
             BY s.loan_id
       ) t
    ON t.loan_id = l.loan_id
 ORDER
    BY l.loan_id
0 голосов
/ 13 июня 2019

Вам не хватает псевдонима:

SELECT loans.Loan_id, loans.TotalLoanAmt
FROM loans
JOIN(
    SELECT SUM(security.SecMktValue) AS TotalSecMktValue,security.Loan_id
    FROM security
    GROUP BY Loan_id ASC
    ) security -- <-- here
ON loans.Loan_id = security.Loan_id;
...