Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2018, 17:36   #1
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию Переменные в MySQL

Привет, подскажите, как положить результат функции sum в переменную?
Делаю так:
Код:
Select
@var :=sum(поле2),
@var
From
Таблица1
Group by поле 1
И в результате получаю
@var :=sum(поле2) | @var
36 | null
PTyTb32 вне форума Ответить с цитированием
Старый 19.02.2018, 18:30   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Главное правило, которое вы нарушаете: вы не должны присваивать переменную и читать ее в одном и том же запросе. Теоретически вы можете получить результат, который ожидаете, но это очень и очень не гарантировано.

В вашем случае можно использовать что-то типа:
Код:
SET @var = 0;
SELECT sum, @var FROM
  (SELECT @var := SUM(поле2) AS sum, @var FROM Таблица1) t
p51x вне форума Ответить с цитированием
Старый 19.02.2018, 19:21   #3
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Главное правило, которое вы нарушаете: вы не должны присваивать переменную и читать ее в одном и том же запросе. Теоретически вы можете получить результат, который ожидаете, но это очень и очень не гарантировано.

В вашем случае можно использовать что-то типа:
Код:
SET @var = 0;
SELECT sum, @var FROM
  (SELECT @var := SUM(поле2) AS sum, @var FROM Таблица1) t
Спасибо, а за что тут отвечает "t"?
PTyTb32 вне форума Ответить с цитированием
Старый 19.02.2018, 21:18   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
The FROM table_references clause indicates the table or tables from which to retrieve rows. If you name more than one table, you are performing a join. For information on join syntax, see Section 13.2.9.2, “JOIN Syntax”. For each table specified, you can optionally specify an alias.
10 доков
p51x вне форума Ответить с цитированием
Старый 20.02.2018, 09:18   #5
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию

сделал! помог вот такой вариант
Код:
@zpt:=(COALESCE((SELECT sum(`ЗП Сутки`) FROM `Реестр ПЛ` WHERE `Водитель` = s.`Индекс` and `Дата открытия` BETWEEN :ot and :dod),0)) AS `ЗП за сутки`,
PTyTb32 вне форума Ответить с цитированием
Старый 20.02.2018, 09:58   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А так
Код:
SELECT COALESCE(sum(`ЗП Сутки`),0) INTO @zpt FROM `Реестр ПЛ` WHERE `Водитель` = s.`Индекс` and `Дата открытия` BETWEEN :ot and :dod
или
Код:
@zpt:=(SELECT COALESCE(sum(`ЗП Сутки`),0) FROM `Реестр ПЛ` WHERE `Водитель` = s.`Индекс` and `Дата открытия` BETWEEN :ot and :dod)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.02.2018, 10:01   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Так это немного другой вариант. Он не выводит сразу же.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переменные в mysql запросе Redline 117 C/C++ Базы данных 2 12.06.2012 13:28
Переменные экземпляра,класса, константы и переменные cop08 Общие вопросы .NET 3 20.12.2010 21:56
есть адреси в mysql нужно поиска с AJAX for mysql orter PHP 1 24.09.2010 10:24
обновление в блоге - Работа с MySQL в С++ с использованием библиотеки mysql++ Pblog Обсуждение статей 0 16.08.2009 16:00