Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Прошу помоши с запросом

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Flash_PR
Отправлено: 24 Ноября, 2016 - 17:26:30
Post Id



Посетитель


Покинул форум
Сообщений всего: 328
Дата рег-ции: Окт. 2013  
Откуда: Санкт-Петербург


Помог: 6 раз(а)




Есть таблица, в ней числовое поле (amount). В поле храняться отрицательные и положительные значение. Нужна помощь в составлении запроса (mysql) подсчет суммы всех отрицательных, всех положительных и общая сумма. Сейчас есть запрос (выложу кастрированый) такого вида

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT
  2.             t1.id,
  3.             SUM(t1.amount) AS amount,
  4.             SUM(t1.amount > 0) AS amount_plus,
  5.             SUM(t1.amount < 0) AS amount_minus
  6.  
  7.         FROM `my_table` AS t1
  8.  
  9.         WHERE (bla-bla-bla)
  10.  
  11.         GROUP BY CONCAT(t1.month_fix,'-',t1.year_fix)
  12.  
  13.         ORDER BY t1.month_fix ASC


Общая сумма все ОК, вместо суммы отрицательных и положительных считает КОЛИЧЕСТВО записей соответсвенно положительных и отрицательных значений, а надо именно суммы....Спасибо.


-----
Умные мысли приходят тогда, когда все глупости уже сделаны...
 
My status
 Top
Мелкий Супермодератор
Отправлено: 24 Ноября, 2016 - 17:33:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Просто добавить условие.
CODE (SQL):
скопировать код в буфер обмена
  1. SUM(IF(t1.amount > 0, t1.amount, 0))


CODE (SQL):
скопировать код в буфер обмена
  1. GROUP BY CONCAT(t1.month_fix,'-',t1.year_fix)
  2. ORDER BY t1.month_fix ASC

Должно быть
CODE (SQL):
скопировать код в буфер обмена
  1. GROUP BY t1.month_fix, t1.year_fix
  2. ORDER BY t1.month_fix ASC

Иначе получите ошибку на mysql 5.7 (пока, правда, редактированием sql_mode можно обойти). Но так правильнее, обращаться можно только к полям группировки либо к результату аггрегирующих функций. Аналогично обращение к t1.id в select


-----
PostgreSQL DBA
 
 Top
Flash_PR
Отправлено: 24 Ноября, 2016 - 17:49:53
Post Id



Посетитель


Покинул форум
Сообщений всего: 328
Дата рег-ции: Окт. 2013  
Откуда: Санкт-Петербург


Помог: 6 раз(а)




Мелкий пишет:
Просто добавить условие.

Спасибо...тоже нашел такое решение в инете (плохо искал первый раз), в любом случае спасибо за участие и помощь....


-----
Умные мысли приходят тогда, когда все глупости уже сделаны...
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB