【问题标题】:SQL queries across joined tables跨连接表的 SQL 查询
【发布时间】:2020-04-05 19:35:28
【问题描述】:

在 MySQL 中,我有三个表:

  • Customer:包含IDNameBalanceAddress
  • Orders:其中包含 Order IDOrder DateShipping DateCustomer ID 作为外键
  • Order Lines:包含Order IDPart IDNumber Ordered

我正在尝试编写一个查询,以便我可以计算出每个客户订购了多少商品,但我不确定如何获得每个客户的离散总和。到目前为止,我的示例代码只是将所有订单行汇总到一个字段中。

SELECT
  CONCAT(customer_last_name, ', ', customer_first_name) AS 'Customer',
  SUM(number_ordered) AS 'Ordered'
FROM Customers t1
  JOIN Orders t2
    ON t1.Customer_id=t2.Customer_id
  JOIN order_lines t3
    ON t2.order_id=t3.order_id;

总的来说,我对 SQL 和编码还很陌生,所以如果我遗漏了一些明显的东西,我深表歉意。

【问题讨论】:

    标签: mysql sql join group-by sum


    【解决方案1】:

    就问题而言,您只需在该查询中添加一个group by 子句即可使其产生您想要的结果:

    select 
        concat(c.last_name, ', ', c.first_name) as customer
        sum(oi.number_ordered) as ordered
    from customers c
    join orders o on o.customer_id = c.customer_id
    join order_lines oi on oi.order_id = o.order_id
    group by c.id, c.last_name, c.first_name
    

    这为每位客户提供一行,以及他们订购的所有商品的总和 o number_ordered

    注意事项:

    • 列别名不应用单引号括起来(代表字符串字面量);通常不需要引号,除非标识符包含特殊字符,在这种情况下您可以使用反引号

    • 有意义的表别名使查询更易于阅读和维护

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 2018-05-11
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 2015-06-09
      相关资源
      最近更新 更多