使用Postgres我有一个场景,我需要为sql语句中的每个唯一id返回可变数量的行。
考虑一下,我有一张用户多年来拥有的汽车表。
+----+----------+---------+-------+
| 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 |
+--------+----------+-------+-----+
从这张表中我只想为每个有轿跑车的用户返回两行而忽略其余的行。
等等。我还想保留空列,因此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 | | | |
+--------+----------+-------+-----+
非常感谢你的帮助。
答案 0 :(得分:2)
据我所知,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;