返回具有相同ID的行和包含相同值的单独列

时间:2020-02-07 00:22:47

标签: sql postgresql

order_id | fulfilled
---------------------
166      | true
166      | true
167      | true
167      | false
167      | false
168      | true

我正在尝试仅选择所有具有相同order_id的行也具有fulfilled true的id。

在上面的示例中,我只想返回order_ids 166、168。由于所有与这些ID匹配的行都满足true。

167不符合标准,因为其中一些错误。

完成此PostgreSQL的最佳方法是什么?

我尝试例如:

select 
order_id, fulfilled
from orders_orderround
where fulfilled = true
order by order_id`

不起作用,因为它正在返回已满足true的任何记录。我尝试使用HAVING,但仍然遇到问题。

2 个答案:

答案 0 :(得分:2)

如果您只想要一个满足所有记录的订单ID列表,则可以使用聚合和带有having子句的过滤器:

select order_id
from orders_orderround
group by order_id
having bool_and(fulfilled)

bool_and()是一个handy Postgres aggregate function,如果所有输入值均为true,则返回 true,否则为false

答案 1 :(得分:0)

只需获取id,不包含在false填充满的行

select order_id
from orders_orderround a
where not exists
(
  select 1 from orders_orderround b 
  where a.order_id = b.order_id and fulfilled = false
)