Во-первых, я использовал 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") }
за исключением того, что вместо того, чтобы возвращать первую строку данного имени, следует возвращать месив всех строк с данным именем (сумма добавлена)
В mysql добавление.group(:name)
(не требующий начальной группы) для выбора будет работать как ожидалось.
Это похоже на повседневную задачу, которая должна быть легкой.Что было бы простым способом сделать это?Пожалуйста, укажите мне правильный путь.
PS Я пытаюсь учиться здесь (как и другие), не просто бросайте sql мне в лицо, пожалуйста, объясните это.