只从活动记录中分组一个值 - ruby​​ on rails

时间:2015-12-29 16:17:04

标签: ruby-on-rails ruby

示例数据:

我有表格订单:

[order_id: 007, state: completed]
[order_id: 123, state: completed]
[order_id: 007, state: failed]
[order_id: 321, state: failed]
[order_id: 111, state: failed]
[order_id: 111, state: failed]

预期产出:

[order_id: 007, state: completed]
[order_id: 123, state: completed]
[order_id: 321, state: failed]
[order_id: 111, state: failed]

我在表格和订单中有很多价值观。具有相同的order_id但不同的状态。我想收到的是没有那些“失败”的订单清单。如果表格中有另一个订单,则说明订单'使用相同的order_id和不同的状态而不是'失败'。

我需要类似的东西:

Order.all.group(:state).take_only_first_value_if("COUNT(*) > 1")

2 个答案:

答案 0 :(得分:1)

使用postgreSQL(snippet):

Order.order("order_id, state = 'failed'").select("DISTINCT ON(order_id) *")

答案 1 :(得分:0)

您可以尝试以下方式:

failed = Order.where(state: 'failed').pluck(:order_id)
completed = Order.where(state: 'completed').pluck(:order_id)

what_you_want = Order.where("order_id IN (#{failed}) AND order_id IN (#{completed})").distinct