首先,我一直在使用 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
我发现的最接近的是Merge duplicate records into 1 records with the same table and table fields
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") }
除了返回给定名称的第一行之外,应该返回具有给定名称的所有行的混搭(添加的数量)
在 mysql 中,将.group(:name)
(不需要初始组)附加到 select 将按预期工作。
这似乎是一项日常任务,应该很容易。这样做的简单方法是什么?请指出我正确的道路。
PS我在这里尝试学习(其他人也是),不要只是将sql扔在我的脸上,请解释一下。