CNum DNum RNum Quant Price
C100 D1 R10 2 8.99
C100 D1 R40 7 9.99
C200 D3 R10 4 16.99
C200 D3 R20 2 15.99
C200 D3 R30 2 17.99
C200 D3 R40 5 19.99
C200 D3 R50 6 18.99
C200 D3 R60 4 19.99
C200 D3 R70 8 15.99
C200 D5 R20 1 8.99
C300 D3 R10 2 16.99
C300 D4 R20 5 22.99
C400 D6 R30 3 4.99
C400 D6 R70 3 2.99
C500 D1 R40 1 9.99
C500 D2 R20 2 23.99
C500 D2 R40 1 24.99
C500 D3 R40 2 19.99
C500 D4 R40 8 23.99
C500 D5 R40 4 8.99
C500 D5 R50 5 8.99
C500 D5 R70 1 9.99
C500 D6 R20 2 1.99
C500 D6 R40 5 3.99
上表是名称订单。我试图解决的查询被称为“对于从餐馆订购的每道菜,获得菜肴编号(DNum),餐馆编号(RNum)和总数量(从该餐厅订购的菜肴)。”我可以填充两个数字,但我完全不确定如何将数量加起来,我尝试过的任何东西都只是总计了数量。有什么想法吗?
这是我尝试过的一个查询。这实际上返回了一个错误:“您的查询不包含指定表达式'DNum'作为聚合函数的一部分。'
SELECT Ord1.DNum, Ord2.DNum, SUM(Ord1.Quant + Ord2.Quant) AS TotQuant
FROM Orders AS Ord1, Orders AS Ord2
WHERE (Ord1.RNum = Ord2.RNum)
另一个不起作用
SELECT Order1.DNum, Order2.DNum, TotQuant
FROM (SELECT SUM(Order1.Quant + Order2.Quant) AS TotQuant
FROM Orders AS Order1, Orders AS Order2
WHERE (Order1.RNum = Order2.RNum)
AND (Order1.DNum = Order2.DNum))
还有一个
SELECT DISTINCT Ord1.DNum, SUM(Ord1.Quant + Ord2.Quant) AS TotQuant
FROM Orders AS Ord1, Orders AS Ord2
WHERE (Ord1.RNum = Ord2.RNum)
AND (Ord1.DNum = Ord2.DNum)
答案 0 :(得分:2)
如果我对你要做的事情的猜测是正确的,那么应该让你接近:
{{1}}
答案 1 :(得分:1)
好的,快速评论一下你的尝试:
查询1
SELECT Ord1.DNum, Ord2.DNum, SUM(Ord1.Quant + Ord2.Quant) AS TotQuant
FROM Orders AS Ord1, Orders AS Ord2
WHERE (Ord1.RNum = Ord2.RNum);
这看起来似乎应该有用,但如果你考虑一下,它就是一个毫无意义的查询。您正在选择两个相同的DNum值和SUM
两个相同的Quant值。一个人可能能够理解你要求计算机做什么,但计算机很困惑。
查询2 和查询3 将无法正常工作,主要是因为它们与返回的初始查询和错误类似。它们略有不同,但基本上你要求的是错误的东西。
现在,您可以尝试:
介绍GROUP BY
方法!哇噢!
GROUP BY
非常适合这个以及其他许多问题!正如w3schools页面上所述:
GROUP BY语句通常与聚合函数一起使用(COUNT, MAX,MIN,SUM,AVG)将结果集分组为一列或多列。
这样的查询:
SELECT Orders.DNum, Orders.RNum, sum(Orders.Quant) as OrderQuantity
FROM Orders
GROUP BY (Orders.DNum, Orders.RNum);
稍微解构一下:
希望它有所帮助!