Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 Postgresql(Rails 3)合并列上的行(同一表)_Ruby On Rails 3_Postgresql_Rails Postgresql - Fatal编程技术网

Ruby on rails 3 Postgresql(Rails 3)合并列上的行(同一表)

Ruby on rails 3 Postgresql(Rails 3)合并列上的行(同一表),ruby-on-rails-3,postgresql,rails-postgresql,Ruby On Rails 3,Postgresql,Rails Postgresql,首先,我一直在使用mysql,现在正在升级到postgresql。sql语法要严格得多,有些行为也不同,因此我的问题是 我一直在搜索如何在诸如 id | name | amount 0 | foo | 12 1 | bar | 10 2 | bar | 13 3 | foo | 20 得到 name | amount foo

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

我一直在搜索如何在诸如

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

name        |   amount
foo         | 32
bar         | 23
我找到的最接近的是

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") }
Exception,而不是返回给定名称的第一行,应该返回添加了给定名称量的所有行的mash

在mysql中,在select中追加.group:name不需要初始组,这将按预期工作

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


另外,我想在这里学习,其他人也一样,不要当着我的面说sql,请解释一下。

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


如果将amount附加到group by子句中,查询将只执行该操作-即count*将返回每个名称每个amount出现的次数,总和将返回该次数乘以该金额的次数。

我不知道RoR在后台执行什么操作,但我猜group:name,:amount将运行一个按名称分组的查询,数量您要查找的是“按名称分组”:


如果将金额追加到group by子句中,则查询只会执行此操作-即count*将返回每个名称中每个金额出现的次数,总和将返回该数量乘以该金额的次数。

如果由于抛出错误,组中不存在名称和金额,则postgresql无法执行此操作,当它们出现时,没有任何特殊情况发生。同名记录不会合并。p、 s.rails完全符合您的预期。如果您正在执行选择名称、金额、金额。。。按名称分组;如果您选择了名称、金额。。。按名称分组。啊,所以由select name、amount、SUMMOUNT引起的错误是由于对所选值使用聚合函数造成的。。。sumamount添加所有金额,选择名称。。。group by name拆分不同名称上返回的行,生成每个名称的金额总和。对的非常感谢你的帮助。没错,是的。Group by将根据条件合并行,并对每个生成的子集应用聚合函数。如果组中不存在名称和金额,则postgresql无法执行此操作。如果出现错误,则会引发错误,当它们存在时,不会组合具有相同名称的记录。p、 s.rails完全符合您的预期。如果您正在执行选择名称、金额、金额。。。按名称分组;如果您选择了名称、金额。。。按名称分组。啊,所以由select name、amount、SUMMOUNT引起的错误是由于对所选值使用聚合函数造成的。。。sumamount添加所有金额,选择名称。。。group by name拆分不同名称上返回的行,生成每个名称的金额总和。对的非常感谢你的帮助。没错,是的。Group by将根据条件合并行,并对每个结果子集应用聚合函数。
select name, sum(amount) as amount, count(*) as tally
from charges
group by name