我正在开发一个包含列表类型报告的Ruby-on-Rails应用程序。该表中的两列是来自事务表的聚合。
所以我们假设我们有这两个表:
**items**
id
name
group
price
**transactions**
id
item_id
type
date
qty
这两个表与事务表中的item_id相关联。
现在我想在表格的items表格中显示一些行,并在该表格中有两个计算列:
计算第1列(迷你图数据):
过去12个月中type =“actuals”项目的交易的迷你图。数据库的结果应该是每个月用逗号分隔的汇总数量的文本。例: 15,20,0,12,44,33,6,4,33,23,11,65
计算第2栏(总销售额6米):
该项目的总数量乘以过去6个月的销售量。
所以结果将是这样的列:
Item name - Sparkline data - 6m total sale
所以结果可能会有数千行,但可能会被分页。
所以问题是,在Rails模型中这样做最直接的方法是什么?它不会牺牲很多性能?虽然这是一个ruby-on-rails问题,但它可能包含更多的sql类型解决方案。
答案 0 :(得分:0)
核心sql可能类似:
select
i.id,
i.name,
y.sparkline,
i.price*s.sum totalsale6m
from
items i left join
(select
x.item_id,
GROUP_CONCAT(x.sumqtd order by datemonth asc SEPARATOR ',') sparkline
from
(select
t.item_id,
date_format(date, '%m') datemonth,
sum(qtd) sumqtd
from
transactions t
where
t.type='actuals' and
t.date>date_sub(now(), interval 1 year)
group by
t.item_id, datemonth
) x
group by
x.item_id
) y on i.id=y.item_id
left join
(select
t.item_id,
sum(qtd) sumqtd
from
transactions t
where
t.date>date_sub(now(), interval 6 month)
group by
t.item_id
) s on i.id=s.item_id
group by
i.id, i.name
一些评论: