【问题标题】:How to count when there are multiple WHERE statements [closed]当有多个 WHERE 语句时如何计算[关闭]
【发布时间】:2013-11-26 17:59:49
【问题描述】:

我有三个表,详细信息如下。

表 1:产品 - 列:产品名称、价格、产品 ID

表 2:客户 - 列:客户名称、客户 ID、城市

表 3:订单 - 列:订单 ID、客户 ID、产品 ID

以下场景的查询应该是什么?

场景: 需要显示客户名称、各个客户的订单数量、支付的总价格(各个客户所有订单的总和)。

【问题讨论】:

  • 为了实现这一目标,您在代码方面做了哪些工作?
  • 我是 SQL 查询的新手,我尝试使用 Select 和 Where 语句编写很多查询,但出现严重错误
  • 感谢大家提供正确答案。每个答案都很完美。再次感谢。
  • 不发布导致“糟糕答案”的查询,您基本上是在要求其他人从头开始工作。
  • 我真的没有让其他人做我的工作。我在一夜之间在 SQLzoo.net 上练习 SQL 查询。在最初的几次痛苦尝试之后,我在这里发布了一个问题。通过这些答案获得帮助后,我在那里完成了两个完整的练习。即使在参考了该教程中的多个查询之后,我也没有发现在询问我不理解的内容时有任何不当行为。通过给出我自己的表和场景,我了解了 SQL 查询的工作原理以及表之间的关系是如何建立的。对不起,如果我冒犯了你,但我不是故意的。

标签: mysql sql subquery


【解决方案1】:

试试这个:

select c.customer_name, x.no_of_orders, y.total_price from customer c
left join (
    select customer_id, COUNT(customer_id) as no_of_orders from orders 
    group by customer_id) x on c.customer_id = x.customer_id
left join (
    select o.customer_id, SUM(p.price) as total_price from order o 
    inner join products p on o.productid = p.productid
    group by customer_id) y on c.customer_id = y.customer_id

【讨论】:

    【解决方案2】:

    试试类似的东西

    SELECT c.CustomerName,
        count(o.orderId) [Orders Count],
        SUM(p.Price) [Total Price]
    FROM CUSTOMERS c
        JOIN ORDERS o ON o.customer_id = c.customer_id
        JOIN PRODUCTS p ON p.product_id = o.product_id
    GROUP BY c.CustomerName
    

    【讨论】:

      【解决方案3】:

      试试这个:

      SELECT c.name,COUNT(o.id),SUM(p.price)
      FROM customers c
      INNER JOIN orders o ON c.id = o.customer_id
      INNER JOIN products p ON p.id = o.product_id
      GROUP BY c.name;
      

      您通过 customer_id 的订单加入客户;然后你加入带有 product_id 的产品的订单。

      然后您只需 GROUP BY c.name 即可获取每个客户的 COUNT(o.id) 和 SUM(p.price) 的聚合值。

      【讨论】:

        【解决方案4】:

        以下内容如何:

        SELECT c.[Customer Name], COUNT(DISTINCT o.[Order ID]), SUM(p.Price)
        FROM Customers AS c
        JOIN Orders AS o ON c.[Customer ID] = o.[Customer ID]
        JOIN Products AS p ON o.[Product ID] = p.[Product ID]
        GROUP BY c.[Customer Name]
        

        唯一的问题是Orders 表似乎缺少Quantity 字段。所以,在上面的例子中,我只是简单地总结了价格。

        此外,为了计算每个客户的订单数量,我在 COUNT() 函数中使用了 distinct。如果单个订单可以指向多个产品,您将需要这样做。否则你可以删除它。

        【讨论】:

          猜你喜欢
          • 2021-03-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-18
          相关资源
          最近更新 更多