【问题标题】:Select top three records grouping by two factors选择按两个因素分组的前三个记录
【发布时间】: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


【解决方案1】:

我认为您只需要按登录国家/地区进行分区

SELECT logincity, logincountry, VAL
FROM (
     SELECT *, 
            ROW_NUMBER() OVER (PARTITION BY logincountry 
                               ORDER BY val DESC) AS Row_ID
     FROM a_table ) T
WHERE Row_ID < 4 
ORDER BY logincity

提示:如果您在 SELECT 中包含 Row_id,您可能会意识到问题

SELECT logincity, logincountry, VAL, Row_ID

所有Row_ID = 1都在您的查询中

提示 2:您的查询需要每个国家/地区的前 3 个城市,因此您只有一个分区 country。所以链接的问题是正确的答案,在这种情况下每个组的前 3 名country

【讨论】:

  • 谢谢!感谢您的回答和见解。
猜你喜欢
  • 2020-03-12
  • 1970-01-01
  • 2014-10-12
  • 2019-09-06
  • 2015-02-09
  • 2020-02-04
  • 2014-05-13
  • 2023-03-20
  • 2011-10-01
相关资源
最近更新 更多