【发布时间】:2017-04-29 01:29:23
【问题描述】:
我正在尝试找出按两个因素分组的具有最高值的三个记录。我意识到这个问题与PostgreSQL: select top three in each group 类似,但我不知道如何从这个包含单个因素的示例中概括为两个因素。除了上面列出的问题之外,我已经尝试搜索堆栈溢出来寻找这个问题的答案,但我找不到,但也许我没有在寻找正确的术语。
简而言之,我正在连接到具有以下架构的表
city, country, value
每个城市、国家/地区组合只有一行,但我有一个变量,但每个国家/地区的城市条目数是可变的。例如,加拿大有几十个城市,美国有一百个,但乌兹别克斯坦只有两个。
我想要的是,输出是一个具有相同架构的表,但只计算包含城市最高三个值的行,嵌套在国家/地区内。例如,如果加拿大有
的城市和值{Canada, toronto, 100}, {Canada, vancouver, 80},
{Canada, montreal,112}, {Canada, calgary, 109},
{Canada, edmonton, 76}, {Canada, winnipeg, 73},
美国有
的条目{{us, nyc, 104}, {us, chicago, 87},
{us, boston, 98}, {us, seattle, 105},
{us, sanfran, 88}, {us, minneapolis, 84},
{us, miami, 103}, {us, houston, 112},
{us, dallas, 78}, {us, tucson, 83}}
乌兹别克斯坦有
的条目 {uzbekistan, qarshi, 95}, {uzbeckistan, gluiston, 101}
我想要的输出是
Canada, Montreal, 112
Canada, Toronto, 100
Canada, Calgary, 109
us, houston, 112
us, seattle, 105
us, nyc, 103,
uzbeckistan, qarshi, 95
uzbeckistan, gluiston 101
我尝试了以下查询
SELECT logincity, logincountry, VAL
FROM
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY logincountry, logincity ORDER BY
val DESC) AS Row_ID
FROM a_table)
WHERE Row_ID < 4
ORDER BY logincity
但我最终在每个国家/地区拥有三个以上的城市。 有人可以帮帮我吗?
感谢堆栈溢出!
【问题讨论】:
-
感谢胡安的编辑 :)
-
欢迎您:)
-
不要用 Postgres 为 Redshift 标记问题
-
为什么不呢?对我来说,同时作为 redshift 问题(因为它在 redshift 服务器上运行)和 postgres 问题(因为 redshift 的底层架构是 postgres 的修改版本)似乎很合适;
标签: sql amazon-redshift