SQL Группирует по одному столбцу и повторяет это значение по другим строкам в той же группе

#sql #group-by #mariadb

#sql #группировка по #mariadb

Вопрос:

Предположим, у нас есть таблица, которая выглядит следующим образом

 greeting | animal | freq
--------------------------
hello    | dog    | 1
hello    | cat    | 3
nice     | dog    | 1
day      | dog    | 2
 

Как мы группируем по «приветствиям» и суммируем «частоту», сохраняя при этом отдельные записи для столбца «животное»?

Запрос должен привести к:

 greeting | animal | freq_sum
-----------------------------
hello    | dog    | 4             <-- value is the sum of the two "hello" records' freq value
hello    | cat    | 4
nice     | dog    | 1
day      | dog    | 2
 

Я знаю, что мы можем сделать

 select greeting, animal, count(freq) as freq_sum
from table
group by greeting
 

Однако это приводит к появлению одной записи из каждой группы (и я предполагаю, что она выполняет неявное МАКСИМАЛЬНОЕ значение для столбца animal?). и вместо этого я хочу, чтобы это агрегированное значение суммы повторялось во всех строках с одной и той же группой.

Ваш совет будет по-настоящему оценен 🙂

Ответ №1:

Если вы используете maria db 10.2 или выше, вы можете использовать функцию Windows следующим образом:

 select greeting, animal, sum(freq) over (partition by greeting) as freq_sum
from table