首页 > 解决方案 > 包含的子查询上的 Active Record 选择字段

问题描述

我有一些要转换为 ActiveRecord 的 sql

sql看起来像

      select type.name, sum(order.sub_total)
      from orders order
      join order_types type on type.id = order_type_id
      group by type.name

我有这个主要工作除了我不知道如何选择type.name

    Order.
      select("sum(sub_total)").
      joins(:order_type).
      group("order_type_id`")

我想它应该是这样的:

    Order.
      select("order_type.name, sum(sub_total)").
      joins(:order_type).
      group("order_type_id`")

但它不知道order_type.name在这种情况下是什么,所以这失败了。

任何人都知道我怎么能以一种仍然感觉“乱七八糟”的方式做到这一点

标签: ruby-on-railsrails-activerecordruby-on-rails-6

解决方案


你可以这样做:

grouped_orders = Order.select("order_types.name name, sum(orders.sub_total) sub_total")
                      .joins(:order_type)
                      .group("order_types.name")

然后,您可以像这样列出订单名称:

grouped_orders.map(&:name)

推荐阅读