【问题标题】:How can I find the number of orders for every distinct customer?如何找到每个不同客户的订单数量?
【发布时间】:2020-10-02 03:45:25
【问题描述】:

我有 2 张桌子:

 CREATE TABLE customers (
    customer_id     INT     NOT NULL AUTO_INCREMENT PRIMARY KEY,
    first_name  VARCHAR(255)    NOT NULL,
    last_name   VARCHAR(255)    NOT NULL,
    email       VARCHAR(255)    NOT NULL,
    address     VARCHAR(255)    DEFAULT NULL,
    city        VARCHAR(255)    DEFAULT NULL,
    state       VARCHAR(2)  DEFAULT NULL,
    zip_code    VARCHAR(5)  DEFAULT NULL,
);

CREATE TABLE orders (
    order_id        INT     NOT NULL AUTO_INCREMENT PRIMARY KEY,
    customer_id         INT     NOT NULL,
    order_placed_date   DATE    NOT NULL,
    FOREIGN KEY (customer_id) REFERENCES customers (customer_id)
); 

现在是 2018 年底,工厂老板想写一个 SQL 查询,通过客户电子邮件地址查找 2018 年下订单的 COUNT。她希望按 2018 年下达的订单的 COUNT 个降序排列结果,以便她可以亲自按订单量向顶级客户发送感谢电子邮件。 我必须编写一个查询,以帮助所有者查找 2018 年所有订单的 COUNT,按客户电子邮件地址,降序排序

我做了一个 INNER JOIN:

SELECT email FROM customers
INNER JOIN orders ON customers.customer_id = orders.customer_id;

但我必须计算每个不同客户的订单,所以我将在 2018 年创建另一列 total_orders。

我怎样才能为年份创建 WHERE 子句?我有日期格式的placed_order_date。 如何计算每个 customer_id 的订单数量?

【问题讨论】:

标签: mysql sql


【解决方案1】:

这里是查询

SELECT customers.email, count(order_id) as totalCount FROM customers
INNER JOIN orders ON customers.customer_id = orders.customer_id where year(order_placed_date)=2018 group by customers.email order by totalCount  desc

【讨论】:

    【解决方案2】:
    select customers.email, count(*)
    from orders
    inner join customers using (customer_id)
    where orders.placed_order_date between '2018-01-01' and '2018-12-31'
    group by customers.email
    

    您可能需要一个关于 orders.placed_order_date 的索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 2013-07-16
      相关资源
      最近更新 更多