如何通过select和subselect或join语句获取数据

时间:2019-05-17 12:06:42

标签: sql postgresql select

我在postgres数据库中有这些数据:

id type  repair status 
1   0     open
1   1     repaired
2   0     open
3   0     open
3   1     repaired
3   1     repaired
4   1     repaired
5   0     open
5   1     open
5   1     repaired
5   0     open
5   1     repaired
6   1     repaired
6   1     open

我想获取所有ID的状态(ID可以是类似book之类的东西)。类型列表示:0不可预订,1:可预订。

示例ID:5 我只想获取不可预订的类型,因为有数据集修复状态处于打开状态,而该事物不可预订。

示例ID:6 我只想预订类型,因为尽管处于维修状态,但事情还是可以预订的。

我可以通过一个选择查询(该查询可以包含子查询或/和联接)吗?

我希望得到这样的结果:

id type  repair status 
1   0 open
2   0 open
3   0 open
4   1 repaired
5   0 open
6   1 open

1 个答案:

答案 0 :(得分:1)

如果您想在Postgres中每id行,最好的解决方案是distinct on。唯一的问题是您的order by子句。

您的规则很难破译。我最好的猜测是:

select distinct on (id) t.*
from t
order by id, bookable desc, (status = 'open')::int desc;

在标准SQL中,您可以将order by更改为:

order by id, bookable desc,
         (case when status = 'open' then 1 else 0 end)