Size: a a a

2020 December 11

OM

Oleg Makarikhin in MySQL
Sergiy Tretyak
Да, можно. Вопрос как. Что надо изначально - получить разницу двух ячеек.
разница текущего значения с  lag или lead
источник

IZ

Ilia Zviagin in MySQL
Sergiy Tretyak
Привет, народ.
прошу вашей подсказки.
есть запрос типа(как пример, ибо реальный длинный)

SELECT @a:=(SUM(conb_works_hours.hours_hours)), @a FROM conb_works_hours

Так вот, переменная "a" не присваиваится, во второй ячейке пишет NULL, хотя первая ячейка значение выдает нормально.

Вопрос - что я упустил в синтаксисе?

Хотя если присваивать тупо какой то прямое значение(SELECT @a:=5, @a ) то вроде работает.
SELECT @a:= SUM(conb_works_hours.hours_hours) FROM conb_works_hours;

Select @a;
источник

OM

Oleg Makarikhin in MySQL
Sergiy Tretyak
Да, можно. Вопрос как. Что надо изначально - получить разницу двух ячеек.
какая версия?
источник

ST

Sergiy Tretyak in MySQL
Oleg Makarikhin
тебе надо кумулятивная сумма? это вроде делается через оконные функции
Мне надо в запросе:
SELECT SUM((cwh.hours_hours)*cwc.wc_cost) as sumpays, SUM(cwh.hours_hours) as sumhours, cp.* FROM conb_projects as cp, conb_workers as cw, conb_workers_category as cwc, conb_works_hours as cwh WHERE (cp.project_finished='N') AND (cwh.hours_project=cp.id) AND (cw.id=cwh.hours_worker) AND (cwc.id=cw.worker_pay_category) GROUP by cp.id


так же получить  sumpays/ sumhours .думал это через переменные сделать.
источник

IZ

Ilia Zviagin in MySQL
Sergiy Tretyak
Привет, народ.
прошу вашей подсказки.
есть запрос типа(как пример, ибо реальный длинный)

SELECT @a:=(SUM(conb_works_hours.hours_hours)), @a FROM conb_works_hours

Так вот, переменная "a" не присваиваится, во второй ячейке пишет NULL, хотя первая ячейка значение выдает нормально.

Вопрос - что я упустил в синтаксисе?

Хотя если присваивать тупо какой то прямое значение(SELECT @a:=5, @a ) то вроде работает.
Тут ключевое слово "вроде" ...
источник

ST

Sergiy Tretyak in MySQL
Oleg Makarikhin
какая версия?
проверяю на:
Версия сервера: 10.5.6-MariaDB-1:10.5.6+maria~buster - mariadb.org binary distribution
источник

IZ

Ilia Zviagin in MySQL
Sergiy Tretyak
Привет, народ.
прошу вашей подсказки.
есть запрос типа(как пример, ибо реальный длинный)

SELECT @a:=(SUM(conb_works_hours.hours_hours)), @a FROM conb_works_hours

Так вот, переменная "a" не присваиваится, во второй ячейке пишет NULL, хотя первая ячейка значение выдает нормально.

Вопрос - что я упустил в синтаксисе?

Хотя если присваивать тупо какой то прямое значение(SELECT @a:=5, @a ) то вроде работает.
Кстати твой запрос вообще неверный, нет from в подзапросе.
источник

IZ

Ilia Zviagin in MySQL
Sergiy Tretyak
Да, можно. Вопрос как. Что надо изначально - получить разницу двух ячеек.
Если ячейки, тебе в другой чат надо.
источник

ST

Sergiy Tretyak in MySQL
Илья,
вон выше изначальный запрос.  Просто не хотел вам глаза забивать излишней детализацией
источник

ST

Sergiy Tretyak in MySQL
Ilia Zviagin
Если ячейки, тебе в другой чат надо.
Сарказм, да 😁. Ну сори, давно с мусклом не работал, забыл нормальную терминологию
источник

IZ

Ilia Zviagin in MySQL
Sergiy Tretyak
Мне надо в запросе:
SELECT SUM((cwh.hours_hours)*cwc.wc_cost) as sumpays, SUM(cwh.hours_hours) as sumhours, cp.* FROM conb_projects as cp, conb_workers as cw, conb_workers_category as cwc, conb_works_hours as cwh WHERE (cp.project_finished='N') AND (cwh.hours_project=cp.id) AND (cw.id=cwh.hours_worker) AND (cwc.id=cw.worker_pay_category) GROUP by cp.id


так же получить  sumpays/ sumhours .думал это через переменные сделать.
Это вообще не корректный запрос, group by неправильный
источник

OM

Oleg Makarikhin in MySQL
Sergiy Tretyak
проверяю на:
Версия сервера: 10.5.6-MariaDB-1:10.5.6+maria~buster - mariadb.org binary distribution
congratulations. почитай про оконные функции lag/lead
https://mariadb.com/kb/en/lag/
https://mariadb.com/kb/en/lead/
эта функция возвращает "значение предыдущией ячейки" согласно какой-то указанной сортировке, возмжоно даже с группировкой
источник

ST

Sergiy Tretyak in MySQL
Ilia Zviagin
Это вообще не корректный запрос, group by неправильный
почему? групирует по проектам. Для каждого проекта считает суму часов, и суму оплат(там подтягивает с многих таблиц)
источник

IZ

Ilia Zviagin in MySQL
Oleg Makarikhin
congratulations. почитай про оконные функции lag/lead
https://mariadb.com/kb/en/lag/
https://mariadb.com/kb/en/lead/
эта функция возвращает "значение предыдущией ячейки" согласно какой-то указанной сортировке, возмжоно даже с группировкой
Да вряд ли ему нужен нарастающий итог
источник

OM

Oleg Makarikhin in MySQL
там с помощбью этого можно разницу между текущей и предыдущей делать
источник

IZ

Ilia Zviagin in MySQL
Sergiy Tretyak
почему? групирует по проектам. Для каждого проекта считает суму часов, и суму оплат(там подтягивает с многих таблиц)
По тому что говно, неверный запрос.

Поля должны были быть либо в group by, либо под агрегатным функциями.
источник

OM

Oleg Makarikhin in MySQL
Sergiy Tretyak
Да, можно. Вопрос как. Что надо изначально - получить разницу двух ячеек.
я так понял из этого
источник

ST

Sergiy Tretyak in MySQL
да мне просто провести математические операции с двумя получеными значениями. Можно конечно их еще раз в запросе повторить, но блин , два раза делать выборки это как то некошерно что ли 😊
источник

ST

Sergiy Tretyak in MySQL
Ilia Zviagin
По тому что говно, неверный запрос.

Поля должны были быть либо в group by, либо под агрегатным функциями.
не понял "Поля должны были быть либо в group by" . а у меня что не так?
источник

IZ

Ilia Zviagin in MySQL
Sergiy Tretyak
да мне просто провести математические операции с двумя получеными значениями. Можно конечно их еще раз в запросе повторить, но блин , два раза делать выборки это как то некошерно что ли 😊
А нафига тебе в переменные выбирать, если все равно потом клиенту отсылаешь?
источник