BIGQUERY - LEFT OUTER JOIN не может использоваться без условия, которое является равенством полей с обеих сторон соединения - PullRequest
1 голос
/ 17 июня 2020

Я пытаюсь найти 5-ю по величине зарплату в bigquery с помощью этого запроса, но он дает мне ошибку

LEFT OUTER JOIN cannot be used without a condition that is an equality of fields from both sides of the join.

Я считаю, что это правильный запрос для sql для этого вопроса но что-то не получается в bigquery. Кто-нибудь может мне с этим помочь? :)

select  concat(first_name, ' ', last_name) as Name, salary
from `table` w1
where 4 = (select count(distinct(salary))
 from  `table` w2
 where w2.salary > w1.salary)

Ответы [ 2 ]

2 голосов
/ 17 июня 2020

Похоже, ваш запрос возвращает строки с четырьмя большими зарплатами. Это будет пятая по величине зарплата. Итак, просто используйте dense_rank():

select w.*
from (select w.*,
             dense_rank() over (order by salary desc) as seqnum
      from `table` w
     ) w
where seqnum = 5;
1 голос
/ 18 июня 2020

Ниже приведено описание BigQuery Standard. SQL

Использование таких функций, как DENSE_RANK (), ROW_NUMBER () и т. Д. Для больших объемов данных обычно приводит к ошибке, например, превышению лимита ресурсов.

Зависит от вашего реального варианта использования - вы можете рассмотреть следующие альтернативы:

#standardSQL
SELECT *
FROM `project.dataset.table`
ORDER BY salary DESC
LIMIT 1 OFFSET 4

ИЛИ

#standardSQL
SELECT AS VALUE ARRAY_AGG(t ORDER BY salary DESC LIMIT 5)[SAFE_OFFSET(4)]
FROM `project.dataset.table` t   

Обе версии, указанные выше, должны дать вам рекорд с 5-й по величине зарплатой

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