Запрос «действителен», но выдает ошибку: скалярный подзапрос создал более одного элемента - PullRequest
0 голосов
/ 13 марта 2019

Этот запрос «действителен» согласно редактору BigQuery SQL. Однако, когда он запускается, он выдает ошибку: скалярный подзапрос выдал более одного элемента

Ввод:

SELECT 
  (Select 
     pcr.repdte 
     from 
     usa_fdic_call_reports_1992.All_Reports_19921231_
     Performance_and_Condition_Ratios as PCR) as Quarter,
(SELECT 
     Round(PCR.lnlsdepr) 
     FROM 
   usa_fdic_call_reports_1992.All_Reports_19921231_Performance_
   and_Condition_Ratios as PCR) as NetLoansAndLeasesToDeposits,
(SELECT LD.IDdepsam 
    FROM usa_fdic_call_reports_1992.All_Reports_19921231_
      Deposits_Based_on_the_dollar250_000_Reporting_Threshold 
      AS LD) as DepositAccountsWithMoreThan250k

Выход Скалярный подзапрос произвел более одного элемента

enter image description here

Вывод запросов при их независимом выполнении ниже:

SELECT
  PCR.repdte as quarter
  FROM 
     usa_fdic_call_reports_1992.All_Reports_19921231_
     Performance_and_Condition_Ratios as PCR 

Выход: enter image description here

SELECT 
  Round(PCR.lnlsdepr) as NetLoansAndLeasesToDeposits
  FROM 
     usa_fdic_call_reports_1992.All_Reports_19921231_
     Performance_and_Condition_Ratios as PCR

Выход: enter image description here

SELECT LD.IDdepsam as DepositAccountsWithMoreThan250k
  FROM 
    usa_fdic_call_reports_1992.All_Reports_
    19921231_Deposits_Based_on_the_dollar250_000_
     Reporting_Threshold AS LD 

Выход: enter image description here

Ответы [ 3 ]

1 голос
/ 13 марта 2019

Скалярные подзапросы не могут создавать более одной строки .Вы показываете, что ваши скалярные подзапросы показывают один столбец и несколько строк .Это - по определению - не сработает.

0 голосов
/ 14 марта 2019

Чтобы исправить, используйте ARRAY.

Например, этот запрос работает:

 SELECT 1 x, (SELECT y FROM UNNEST(SPLIT("1")) y) y

enter image description here

Но этоодин из них выдаст вам заявленную ошибку:

 SELECT 1 x, (SELECT y FROM UNNEST(SPLIT("1,2")) y) y

 "Scalar subquery produced more than one element"

И я могу исправить ее с помощью ARRAY(), которая даст вложенные повторяющиеся результаты:

 SELECT 1 x, ARRAY(SELECT y FROM UNNEST(SPLIT("1,2")) y) y

enter image description here

Или убедитесь, что выдается только один ряд, с LIMIT:

 SELECT 1 x, (SELECT y FROM UNNEST(SPLIT("1,2")) y LIMIT 1) y

enter image description here

0 голосов
/ 14 марта 2019

Я решил проблему, не используя подзапрос, и вместо этого использовал JOIN

SELECT 
  pcr.cert as cert,
  pcr.name as NameOfBank,
  pcr.repdte as Quarter, 
  Round(PCR.lnlsdepr) as NetLoansAndLeasesToDeposits,
  LD.IDdepsam as DepositAccountsWithMoreThan250k
FROM 
    usa_fdic_call_reports_1992.All_Reports_19921231_Performance
    _and_Condition_Ratios as PCR
JOIN
    usa_fdic_call_reports_1992.All_Reports_19921231_Deposits_Based_
    on_the_dollar250_000_Reporting_Threshold AS LD
ON PCR.cert = LD.cert

Вывод: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...