计算按查询分组的项目总数

时间:2021-06-13 05:50:21

标签: mysql sql

我有两张桌子:

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);

现在我发现了两个问题:

  1. 订单数不正确。不确定是什么。我在这里做错了。
  2. 如何计算同一查询中的项目数?

我正在学习 sql,这似乎很难理解。感谢您的帮助。

2 个答案:

答案 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 就足够了。

相关问题