#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