Дана БД
second_material (фирма вторсырья, БД учебная):
Задание:
Написать запрос с выходными данными (point, date, out, inc, diff), в котором каждому пункту за каждую дату соответствует одна строка. В этой задаче требуется данные из двух таблиц собрать в одном результирующем наборе; при этом приход и расход денег на пункте приема в один и тот же день должны находиться в одной строке.
Вот содержимое таблицы
income:
mysql> select * from income where _point = 7;
+-------+--------+------------+-----------+
| code | _point | _date | _inc |
+-------+--------+------------+-----------+
| 00010 | 007 | 2010-03-08 | 120000.00 |
| 00011 | 007 | 2010-03-08 | 80000.00 |
| 00012 | 007 | 2010-03-08 | 20000.00 |
| 00013 | 007 | 2010-04-15 | 90000.00 |
| 00014 | 007 | 2010-05-05 | 40000.00 |
| 00015 | 007 | 2010-06-12 | 65000.00 |
+-------+--------+------------+-----------+
Вот содержимое таблицы
outcome:
mysql> select * from outcome where _point = 7;
+-------+--------+------------+-----------+
| code | _point | _date | _out |
+-------+--------+------------+-----------+
| 00010 | 007 | 2010-03-08 | 115000.00 |
| 00011 | 007 | 2010-03-08 | 77800.00 |
| 00012 | 007 | 2010-03-08 | 19900.00 |
| 00013 | 007 | 2010-04-15 | 84750.00 |
| 00014 | 007 | 2010-05-05 | 35500.00 |
| 00015 | 007 | 2010-06-12 | 61100.00 |
+-------+--------+------------+-----------+
Вот, что я написал:SELECT income._point, income._date, @a:=SUM(income._inc) AS income,
@b:=SUM(outcome._out) AS outcome, @a-@b AS diff
FROM income INNER JOIN outcome
ON (income._date = outcome._date AND income._point = outcome._point)
GROUP BY income._date, outcome._date HAVING income._point = 7;
Просуммировав поля
income и
outcome по дате он умножил еще эту сумму на количество повторяющихся записей. И так во всей таблице.
Кроме того, поле
diff выводит один и тот же результат во всей таблице.
Вот, что получилось:mysql> source C:/SQL/Lab_8/queries/exercise_1.sql;
+--------+------------+-----------+-----------+------+
| _point | _date | income | outcome | diff |
+--------+------------+-----------+-----------+------+
| 007 | 2010-03-08 | 660000.00 | 638100.00 | 4500 |
| 007 | 2010-04-15 | 90000.00 | 84750.00 | 4500 |
| 007 | 2010-05-05 | 40000.00 | 35500.00 | 4500 |
| 007 | 2010-06-12 | 65000.00 | 61100.00 | 4500 |
+--------+------------+-----------+-----------+------+
Если убрать агрегатную функцию
SUM, то все выводит нормально за исключением того, что он выводит только первую попавшуюся запись без суммирования.
Что я не так делаю?