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

标签 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 可以是书之类的东西)。类型列表示:0 不可预订,1:可预订。

示例编号:5 我只想获取不可预订的类型,因为有数据集修复状态打开并且事物不可预订。

示例编号:6 我只想获得可预订的类型,因为尽管维修状态已打开,但它仍是可预订的。

我可以通过一个选择查询来完成吗(这个查询可以包含子查询或/和连接)?

我期望这样的结果:

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

最佳答案

如果您希望在 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)

关于sql - 如何通过 select 和 subselect 或 join 语句获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56186073/

相关文章:

node.js - postgres 中的大量数据库 - 架构最佳实践

sql - 批量重命名列 postgresql

javascript - select2 区分自由文本响应(标签 : true)

MySql 不断重用 SQL 查询的结果

sql - PostgreSQL:选择行直到单个列的总和减少达到阈值

mysql - MySQL 中的两步左连接

sql - 在数据库中组织大量带时间戳的值(sql/nosql)

sql - 运行用户定义的 SQL 脚本的 postgresql pgBench 工具

mysql - 从多表 SELECT 语句返回无效结果

mysql - 大 IN 语句 - 来自电子表格的数据