Postgresql(Rails3)在列上合并行(同一个表)



首先,我一直在使用mysql,现在正在升级到postgresql。sql语法要严格得多,有些行为也不同,因此我提出了问题。

我一直在寻找如何在诸如之类的表上的postgresql查询中合并行

id      | name        |   amount
0       | foo         | 12
1       | bar         | 10
2       | bar         | 13
3       | foo         | 20

并获得

name        |   amount
foo         | 32
bar         | 23

我发现的最接近的是将重复的记录合并为具有相同表和表字段的1个记录

sql返回"name"的重复项:

 scope :tallied, lambda { group(:name, :amount).select("charges.name AS name,
                              SUM(charges.amount) AS amount,
                              COUNT(*) AS tally").order("name, amount desc") }


我需要的是

 scope :tallied, lambda { group(:name, :amount).select("DISTINCT ON(charges.name) charges.name AS name,
                              SUM(charges.amount) AS amount,
                              COUNT(*) AS tally").order("name, amount desc") }

除了,而不是返回给定名称的第一行,应该返回具有给定名称(添加量)的所有行的mash

在mysql中,将.group(:name)(不需要初始组)附加到select将按预期工作。

这似乎是一项日常任务,应该很容易。做这件事的简单方法是什么?请给我指一条正确的路。

第页。S.我正在努力学习这里(其他人也是),不要只是把sql扔到我脸上,请解释一下。

我不知道RoR在后台做什么,但我猜group(:name, :amount)将运行一个按名称和金额分组的查询。你要找的是group by name:

select name, sum(amount) as amount, count(*) as tally
from charges
group by name

如果将amount附加到group by子句,则查询将执行此操作——即count(*)将返回每个名称中每个金额出现的次数,而sum()将返回该次数乘以该金额。

相关内容

  • 没有找到相关文章

最新更新