我有两张桌子:
Orders
======
id total_price created_on
1 100 2021-01-22
2 200 2021-01-23
Items
=====
id order_id
11 1
12 1
13 2
我想创建一个查询以按日期获取收入。为此,我将按顺序汇总总价并按日期分组。除了收入,我还想获得该日期的订单和商品总数。这是我写的一个查询:
SELECT
count(orders.id) as orders,
sum(orders.total_price) as billing,
DATE(CREATED_ON) as created_on
FROM
orders
WHERE orders.deleted_on IS NULL
group by Date(orders.created_on);
现在我发现了两个问题:
我正在学习 sql,这似乎很难理解。感谢您的帮助。
答案 0 :(得分:0)
由于 Items.order_id 是 Order.id 的外键,因此我们需要先连接两个表。
SELECT count(order_id) AS orders,sum(total_price) AS billing,Orders.created_on as created_on FROM Orders,(select order_id from Items) as new WHERE Orders.id=new.order_id GROUP BY created_on;
答案 1 :(得分:0)
这很棘手,因为当您合并这些项目时,您的收入可能会成倍增加。一种方法是在加入订单之前聚合项目:
SELECT DATE(o.Created_On) as created_on_date,
COUNT(*) as num_orders,
SUM(i.num_items) as num_items,
SUM(o.total_price) as billing
FROM orders o LEFT JOIN
(SELECT i.order_id, COUNT(*) as num_items
FROM items i
GROUP BY i.order_id
) i
ON i.order_id = o.id
WHERE o.deleted_on IS NULL
GROUP BY DATE(o.created_on);
注意:这里使用了 LEFT JOIN
,因为您没有指定所有订单都有商品。如果都这样做,那么 INNER JOIN
就足够了。