我有一个 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
这意味着一家商店有很多销售,每个销售都有一个地址。
答案 0 :(得分:0)
由于您不仅要统计销售额,还要返回数据,因此您应该更喜欢 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