如何在mysql中使用多个select语句进行此查询?

时间:2014-10-22 11:39:40

标签: mysql

我想用多个语句进行此查询,但我不知道如何。请帮我。谢谢! :)

SELECT 
      customerNumber AS 'Customer Number', 
      customerName AS ' Customer Name',
      quantityordered AS 'Quantity Ordered', 
      amount AS 'Amount',
      SUM(quantityOrdered*amount) AS 'Total Amount'
   FROM 
      customers 
         INNER JOIN orders USING (customerNumber) 
            INNER JOIN orderdetails USING (orderNumber)
         INNER JOIN payments USING (customerNumber)
   WHERE 
      quantityOrdered >= 50
   GROUP BY 
      customerName 
   HAVING 
      COUNT(quantityOrdered) > 5 
   ORDER BY 
      3;

2 个答案:

答案 0 :(得分:0)

在评论中解释太多......您的查询没有意义,可能是由于缺乏对该组的了解和具有上下文。我首先要开始你的查询应该将所有列引用为“table.column”或“alias.column”,这样我们才能知道列的起源与猜测。

“分组依据”按给定组(客户名称)应用值的聚合(例如qty * amount的SUM())。但是,如果您在子级表中有多个记录(例如:一个人的多次付款,那么您的计数和总和值可能会意外地重复。)此外,您还有一个按客户名称分组...如果您有5个不同的人名叫“吉姆”,但他们是完全不同的人。您可能应按其唯一的customerNumber进行分组,这将导致5个不同的“Jim”记录及其各自的唯一客户编号。

你的QtyOrd的Where子句> 50意味着只有那些单独的订单项购买(假设)订单详细信息,数量为50或更多将被包括在内,无论订购的商品数量多少,即使在相同的订单上也是如此,如果这是您想要的。

最后,你有count()>的子句5,看来你只想要那些订购了至少5件不同数量50件或更多的东西的客户,这些客户是由where子句限定的。

按3的顺序表示您希望按照自然升序排序的数量排序(vs降序在顶部最多,最少数量在底部)。

即便如此,您还有一个额外的加入您的付款表。以下是重复可能会启动的地方......如果您有2或3笔付款的订单,则您的2个订单项的订单刚刚变为4或6作为最终计数。

了解这些,您可能希望在原始问题中更好地描述您正在尝试获得的内容。您尽可能地展示了查询,但仍然不清楚......

答案 1 :(得分:-1)

根据你的情况和提供的数据解释我已经得到了这类东西..希望它能帮助你。

select * from orders where customerNumber == '';

select * from orderdetails where orderNumber == '';

select * from payments where customerNumber == '';

select SUM(o.quantityOrdered * p.amount) as 'quantityOrdered' from orders o, payments p where o.orderId == p.orderId;