我迷失了窗口函数如何与嵌套查询一起工作的逻辑。我要合并两个表,然后需要以某种方式从符合特定条件的行中获取前三个结果。
我已经尝试了一些强烈的嵌套,但是我对它的工作方式迷失了。我看到了其他类似的问题,但是您首先需要将两个表连接起来的地方并没有那么多……而且我不确定我需要在何处将其放在窗口函数中。
所以你有类似的东西:
select name, age, income, location
from namebank join income_stuff where namebank.name = incomestuff.name
name | age | income | location
bob 23 40000 ny
susan 18 25000 mi
marty 12 400 ny
brent 26 45000 ny
carl 18 26000 mi
lana 56 4000 ny
raina 30 50000 mi
这很好,但是我需要
name | age | income | location
brent 26 45000 ny
bob 23 40000 ny
lana 56 4000 ny
raina 30 50000 mi
carl 18 26000 mi
susan 18 25000 mi
因此,收入按地点排列,但收入递减,而每个地点仅排名前三。
答案 0 :(得分:0)
您需要使用组语句来实现此目的。为了降低复杂性,我假设您的查询为“ testdata”表(您可以使用查询创建一个视图来模仿此视图),并制定了以下查询here
这里使用的方法是按收入对每组的每一行进行排名。您可以取消对Count()部分的注释,以查看上面的链接中发生了什么。
因此,没有任何视图或中间表的总复杂查询将如下所示:
SELECT testdata.name, testdata.income, testdata.age, testdata.location
FROM
(select name, age, income, location
from namebank join income_stuff where namebank.name = incomestuff.name)
AS testdata
LEFT JOIN
(select name, age, income, location
from namebank join income_stuff where namebank.name = incomestuff.name)
AS lesser
ON testdata.location = lesser.location AND testdata.income < lesser.income
GROUP BY testdata.location, testdata.name, testdata.age, testdata.income
HAVING COUNT(lesser.income) < 3
ORDER BY testdata.location DESC, testdata.income DESC
编辑: This is the sqlfiddle假设可以配置表namebank和Income_stuff。