Может ли кто-нибудь помочь мне, как сгруппировать? У меня есть этот запрос, мне нужно сгруппировать сумму по «условию» и по «групповой_программе», то есть
У меня есть этот запрос:
SELECT at_ce.condicion, gpr.grupo_programa FROM at_cons_externa at_ce
INNER JOIN gen_programa gpr ON at_ce.id_programa = gpr.id_programa
Я могу сгруппировать с этой строкой:
select condicion, count(*) as cantidad from at_cons_externa group by condicion
Но я также хотел бы сгруппировать "group_program" в том же предложении и с суммой, которая принадлежит каждому, надеюсь, вы можете мне помочь, спасибо...
Чтобы иметь возможность использовать функции агрегации COUNT, SUM и т. д. вы должны сгруппировать все остальные столбцы, которые не учитываются, для подсчета, добавления и т. д.
Пример:
Вы можете ввести два выбора в from:
Принятый ответ содержит то, что вам нужно. Просто чтобы заплатить за комментарий, который я сделал относительно «сводной таблицы», я разместил здесь возможность ее создания.
Например, «заголовки строк» будут значениями,
condicion
а заголовки столбцов будут значениямиgrupo_programa
(я сгенерировал 100 случайных значений, чтобы проверить, как это работает).Во-первых, давайте поместим интересующие значения во временную таблицу, чтобы избавить нас от написания одного и того же запроса снова и снова.
Чтобы это решение работало, необходимо убедиться, что функция
GROUP_CONCAT()
может возвращать длинные строки. В общем, значения, которое я предлагаю здесь, более чем достаточно:Теперь самое интересное: мы собираемся сгенерировать список выражений, сумма которых равна 1 для каждого значения столбца,
grupo_programa
присутствующего в таблице, и нулю в противном случае. Эти выражения будут храниться в переменной (@sql
):Давайте теперь завершим запрос, который мы генерируем:
Если вы хотите увидеть, как получился ваш полный запрос, вы можете проверить это следующим образом:
Теперь да, давайте получим значения: Подготовьте и выполните только что созданный запрос:
Результат:
Эта последняя строка (со значением
NULL
в столбцеcondicion
) содержит итог для каждого столбца (это значение генерируется при использованииGROUP BY ... WITH ROLLUP
; если оно вам не нужно, просто удалите егоWITH ROLLUP
).Когда вы закончите, не забудьте «очистить» подготовленный оператор:
Я надеюсь, что это решение будет полезным для вас.
Ваше здоровье