Postgres:select n 个唯一的 ID 行
Postgres: select n unique rows for ID
使用 Postgres 我有一个场景,我需要在 sql 语句中为每个唯一 ID return 可变行数。
假设我有 table 个用户多年来拥有的汽车。
+----+----------+---------+-------+
| ID | make | model | type |
+----+----------+---------+-------+
| 1 | toyota | camry | sedan |
| 1 | ford | mustang | coupe |
| 1 | toyota | celica | coupe |
| 1 | bmw | z4 | coupe |
| 1 | honda | accord | sedan |
| 2 | buick | marque | sedan |
| 2 | delorean | btf | coupe |
| 2 | mini | cooper | coupe |
| 3 | ford | f-150 | truck |
| 3 | ford | mustang | coupe |
| 1 | ford | taurus | sedan |
+--------+----------+-------+-----+
从这个table我只想return为每个拥有双门轿跑车的用户排两行,而忽略其余部分。
类似的东西。我还想保留空列,以便 ID 3 的第二个结果为空,因为只有一辆 coupe 类型的汽车。我也在使用限制,因为这必须 运行 AWS Reshift。所以,我不能使用很多功能。使用 SQL 服务器中的 Top 语句似乎很容易,但是由于 Redshift 限制和我缺乏知识,我不确定最好的方法。
+----+----------+---------+-------+
| ID | make | model | type |
+----+----------+---------+-------+
| 1 | ford | mustang | coupe |
| 1 | toyota | celica | coupe |
| 2 | delorean | btf | coupe |
| 2 | mini | cooper | coupe |
| 3 | ford | mustang | coupe |
| 3 | | | |
+--------+----------+-------+-----+
非常感谢您的帮助。
据我所知,Redshift支持window functions:
select id, make, model, type
from (
select id, make, model, type,
row_number() over (partition by id order by make) as rn
from the_table
where type = 'coupe'
) t
where rn <= 2
order by id, make;
使用 Postgres 我有一个场景,我需要在 sql 语句中为每个唯一 ID return 可变行数。
假设我有 table 个用户多年来拥有的汽车。
+----+----------+---------+-------+
| ID | make | model | type |
+----+----------+---------+-------+
| 1 | toyota | camry | sedan |
| 1 | ford | mustang | coupe |
| 1 | toyota | celica | coupe |
| 1 | bmw | z4 | coupe |
| 1 | honda | accord | sedan |
| 2 | buick | marque | sedan |
| 2 | delorean | btf | coupe |
| 2 | mini | cooper | coupe |
| 3 | ford | f-150 | truck |
| 3 | ford | mustang | coupe |
| 1 | ford | taurus | sedan |
+--------+----------+-------+-----+
从这个table我只想return为每个拥有双门轿跑车的用户排两行,而忽略其余部分。
类似的东西。我还想保留空列,以便 ID 3 的第二个结果为空,因为只有一辆 coupe 类型的汽车。我也在使用限制,因为这必须 运行 AWS Reshift。所以,我不能使用很多功能。使用 SQL 服务器中的 Top 语句似乎很容易,但是由于 Redshift 限制和我缺乏知识,我不确定最好的方法。
+----+----------+---------+-------+
| ID | make | model | type |
+----+----------+---------+-------+
| 1 | ford | mustang | coupe |
| 1 | toyota | celica | coupe |
| 2 | delorean | btf | coupe |
| 2 | mini | cooper | coupe |
| 3 | ford | mustang | coupe |
| 3 | | | |
+--------+----------+-------+-----+
非常感谢您的帮助。
据我所知,Redshift支持window functions:
select id, make, model, type
from (
select id, make, model, type,
row_number() over (partition by id order by make) as rn
from the_table
where type = 'coupe'
) t
where rn <= 2
order by id, make;