我想用多个语句进行此查询,但我不知道如何。请帮我。谢谢! :)
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;
答案 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;