【发布时间】:2020-05-12 21:34:05
【问题描述】:
我有两张桌子orders 和order_items。我需要按天对结果进行分组。但我还需要从另一个表中获取每天的energy_used 的总和。当我尝试使用连接时,我每天都会出错order_sum。不知道我做错了什么。
我正在使用连接,因为我以后还想按这些列排序。
这是我的orders 表
+----+-----------+---------+---------------------+
| id | order_sum | user_id | created_at |
+----+-----------+---------+---------------------+
| 1 | 25.13 | 7 | 2020-01-25 09:13:00 |
| 2 | 14.00 | 5 | 2020-01-26 10:14:00 |
| 3 | 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 | 25.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 |
+---------------+-----------------+-------------------+---------------------+----------------+
这是我尝试过的查询,但我得到了错误的结果,由于我加入了 order_items 表,order_sum 没有被正确计算
SELECT
DATE(orders.created_at) AS date_of_month,
SUM(orders.order_sum) AS order_sum,
order_items.energy_used
FROM
orders
JOIN (
select
order_id,
sum(energy_used) as energy_used
from
order_items
group by
date(created_at)
) as order_items on order_items.order_id = orders.id
JOIN (
select
max(created_at) as last_order_date,
max(order_sum) as last_order_sum
from
orders
order by created at desc
limit 1
) as orders2 on orders2.id = orders.id
GROUP BY
date_of_month
【问题讨论】:
-
您使用的是哪个版本的 MySQL?
-
@GMB 我使用的是 5.5 版
-
一个好的“经验法则”是,如果非聚合列出现在 SELECT 中,那么它也必须出现在 GROUP BY 中。
-
last_order_sum的逻辑是什么? -
@GordonLinoff last_order_sum 是从订单表中取出 max(created_at) 的 sum(order_sum)
标签: mysql sql database group-by