SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 15.10.2009 20:45:09

uNkind
Участник
Зарегистрирован: 15.10.2009
Сообщений: 2

Добрый день. Помогите плз составить запрос, не выводится сумма.

Доброго времени суток!

Есть таблица "balans":

id  |  tekst  |  summ_p  |  summ_m  |  date

Мне нужно сделать запрос, который отбирал бы строки по введенному диапазону дат, и считал сумму значений отдельно столбца "summ_p" и отдельно столбца "summ_m" этих строк. У меня получается так:

SELECT
    date, tekst, summ_p, summ_m, SUM(summ_p) AS p, SUM(summ_m) AS m
FROM
    balans
WHERE
    date BETWEEN 'a' AND 'b'
GROUP BY date
ORDER BY date DESC

В итоге получаются совершенно неадекватные результаты... Подскажите, что не так, заранее огромное спасибо!

Неактивен

 

#2 15.10.2009 22:56:15

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Добрый день. Помогите плз составить запрос, не выводится сумма.

Стандарт SQL вообще-то запрещает такие запросы - выборка полей не входящих в group by и не имеющих групповой функции. По сути сервер MySQL выбирает в данном случае случайные записи.

Неактивен

 

#3 15.10.2009 23:04:23

nightssss
Участник
Зарегистрирован: 13.10.2009
Сообщений: 14

Re: Добрый день. Помогите плз составить запрос, не выводится сумма.

Проблема как я понимаю в GROUP BY date. Ваш запрос выводит сумму где дата одинаковая, то есть если таблица такая:
                          
                                  id    tekst    summ_p    summ_m    date
              1    qwe    1    2    2009-10-14
              2    sad    4    5    2009-10-12
              3    qwrax    4    4    2009-10-14
              4    wsaad    1    4    2009-10-14

И если сделать запрос:
SELECT
    date, tekst, summ_p, summ_m, SUM(summ_p) AS p, SUM(summ_m) AS m
FROM
    balans
WHERE
    date BETWEEN '2009-10-12' AND '2009-10-14'
GROUP BY date
ORDER BY date DESC

То результат будет таким:
date    tekst    summ_p    summ_m    p    m
2009-10-14    qwe    1    2    6    10
2009-10-12    sad    4    5    4    5

Первый запрос, который пришёл на ум и решает Вашу проблему, но вряд ли он оптимален:
SELECT
    date, tekst, summ_p, summ_m,
    (SELECT SUM(summ_p) FROM balans WHERE date BETWEEN 'a' AND 'b') AS p,
    (SELECT SUM(summ_m) FROM balans WHERE date BETWEEN 'a' AND 'b') AS m
FROM
    balans
WHERE
    date BETWEEN 'a' AND 'b'

Неактивен

 

#4 15.10.2009 23:18:15

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Добрый день. Помогите плз составить запрос, не выводится сумма.

Я не понял, что именно требуется в исходной задаче - может нужно, чтобы в столбцах p и m значение возрастали последовательно, т.е. сумма предыдущих строк?

Неактивен

 

#5 16.10.2009 10:46:09

uNkind
Участник
Зарегистрирован: 15.10.2009
Сообщений: 2

Re: Добрый день. Помогите плз составить запрос, не выводится сумма.

nightssss, большое спасибо, Ваш запрос идеально работает.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson