【问题标题】:Group by date and then by city on Rails在 Rails 上按日期然后按城市分组
【发布时间】:2021-04-20 00:25:56
【问题描述】:

我有一个 api,它的输出必须如下所示:

[
  {
    "store": "store",
    "date": "2020/05/03",
    "address": {
       "city": "city1"
       "address_line_1": "address"
     },
    "sales_count": 10,
  },
  {
    "store": "store",
    "date": "2020/05/03",
    "address": {
       "city": "city2"
       "address_line_1": "address"
     },
    "sales_count": 21,
  },
]

我知道如何处理分组和销售计数,但我在按城市分组时遇到问题

Store.first.sales.group(:date).count 将是 sales_count,但我不确定如何按地址包含组。

考虑到地址 = Store.first.sales.first.address

这意味着一家商店有很多销售,每个销售都有一个地址。

【问题讨论】:

    标签: ruby-on-rails ruby api activerecord


    【解决方案1】:

    由于您不仅要计算销售额,还要返回数据,那么您应该更喜欢PARTITION BY 而不是GROUP BY。 可以PARTITION BY结合日期、地址:

    SELECT store, date, address, 
    COUNT(sales) OVER (PARTITION BY date, address) AS sales_count
    FROM _
    

    除此之外,如果你什么都不做,只返回数据,那么最好的做法是直接从适配器调用 sql(这样我们就避免了 ActiveRecord 模型对象的创建导致各种内存争用问题)

    result = ActiveRecord::Base.connection.execute(
     "SELECT store, date, address, 
      COUNT(sales) OVER (PARTITION BY date, address) AS sales_count 
      FROM _"
    )
    result.each do |msg|
     # json serialize ???
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      • 2018-12-27
      • 2012-06-28
      • 2020-10-20
      • 2018-04-15
      • 2013-10-01
      相关资源
      最近更新 更多