Со ссылкой на этот вопрос ( Как получить сумму в объединенной таблице при использовании group by - получение неверных результатов ) У меня есть две таблицы orders
и order_items
. Мне нужно сгруппировать результаты по дням. Но мне также нужно получить сумму energy_used
за каждый день из другой таблицы. Когда я пытаюсь сделать это с помощью объединения, я получаю неправильные значения order_sum
за каждый день (они не суммируются). Не уверен, что я делаю неправильно.
Я хотел бы получить за каждый день
- сумму
order_items.energy_used
для всех заказов, созданных в этот день - сумма
orders.order_sum
для всех заказов, созданных в этот день created_at
и order_sum
, которые соответствуют последним order
, созданным в этот день
Вот мой orders
таблица
+----+-----------+---------+---------------------+
| id | order_sum | user_id | created_at |
+----+-----------+---------+---------------------+
| 1 | 25.13 | 7 | 2020-01-25 09:13:00 |
| 2 | 10.00 | 7 | 2020-01-25 15:23:00 |
| 3 | 14.00 | 5 | 2020-01-26 10:14:00 |
| 4 | 35.00 | 1 | 2020-01-27 11:13:00 |
+----+-----------+---------+---------------------+
А вот и моя order_items
таблица
+----+----------+-------------+---------------------+
| id | order_id | energy_used | created_at |
+----+----------+-------------+---------------------+
| 1 | 1 | 65 | 2020-01-25 09:13:00 |
| 2 | 1 | 12 | 2020-01-25 09:13:00 |
| 3 | 2 | 70 | 2020-01-26 10:14:00 |
| 4 | 2 | 5 | 2020-01-26 10:14:00 |
| 5 | 3 | 0 | 2020-01-27 11:13:00 |
+----+----------+-------------+---------------------+
И это желаемый результат, которого я пытаюсь достичь
+---------------+-----------------+-------------------+---------------------+----------------+
| date_of_month | total_order_sum | total_energy_used | last_order_date | last_order_sum |
+---------------+-----------------+-------------------+---------------------+----------------+
| 2020-01-25 | 35.13 | 77 | 2020-01-25 09:13:00 | 25.13 |
| 2020-01-26 | 14.00 | 75 | 2020-01-26 10:14:00 | 14.00 |
| 2020-01-27 | 35.00 | 0 | 2020-01-27 11:13:00 | 35.00 |
+---------------+-----------------+-------------------+---------------------+----------------+
И вот запрос, который я пробовал, но я получаю неправильные результаты, порядок_сум не рассчитывается правильно. Он показывает то же, что и last_order_sum
select
date(o.created_at) date_of_month,
i.total_energy_used,
o.created_at last_order_date,
o.order_sum last_order_sum,
sum(order_sum) as total_order_sum
from orders o
inner join (
select date(o1.created_at) date_of_month, sum(i1.energy_used) total_energy_used
from orders o1
inner join order_items i1 on o1.id = i1.order_id
group by date(o1.created_at)
) i on i.date_of_month = date(o.created_at)
where o.created_at = (
select max(o1.created_at)
from orders o1
where date(o1.created_at) = date(o.created_at)
)
Вот скрипка: https://dbfiddle.uk/?rdbms=mysql_5.6&fiddle=92b8cc2920ad9f7a7cdd56bded5a3bf2