Использование пользовательской переменной mysql с группой по условию - PullRequest
2 голосов
/ 15 января 2012

Я пытаюсь сохранить результат суммы в переменной для последующего использования в запросе, но пока безуспешно.

  • Я попробовал это, и это сработало так, как я ожидал: SELECT @pos := 'titi' "c1", @pos "c2";

titi | titi

  • Когда я пытаюсь сделать это с помощью функции «группа за функцией», она просто больше не работает, она устанавливает в моей переменной последнюю обработанную функцию.

SELECT c1, @titi := SUM(c2), @titi FROM (SELECT 1 "c1",2 "c2" UNION SELECT 2,3 UNION SELECT 1,4) t GROUP BY c1;

Фактический вывод :

1, 6, 3

2, 3, 3

Желаемый выход :

1, 6, 6

2, 3, 3

Что можно сделать, чтобы переменная сохраняла свое значение для каждой строки?

1 Ответ

5 голосов
/ 15 января 2012

Если я правильно помню, проблема здесь в том, что значение столбца, который не содержит функцию агрегирования, вычисляется при обработке первой строки группы, тогда как присвоение @var:=SUM происходит, когда агрегированное значение равно вычисленное.

То есть вам нужно либо просто повторить функцию агрегирования в другом контексте, либо, если агрегированная функция довольно сложна, и вы не хотите повторять: а) поместить все в подзапрос, б) использовать что-то вроде IF(COUNT(*), @var, @var) (выглядит довольно нахально)

P.S. Ваши запросы кажутся недействительными, поскольку имена столбцов должны быть заключены в кавычки.

...