bigquery-left外部连接

lkaoscv7  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(335)

我试图用这个查询在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)
iih3973s

iih3973s1#

您的查询似乎返回了四个较大的行。这将是第五大薪水。所以,就用 dense_rank() :

select w.*
from (select w.*,
             dense_rank() over (order by salary desc) as seqnum
      from `table` w
     ) w
where seqnum = 5;
b1uwtaje

b1uwtaje2#

下面是bigquery标准sql
对大量数据使用诸如densed\u rank()、row\u 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

以上两个版本都会给你一个第五高薪的记录

相关问题