Select
d.CompanyName, c.SubTotal, b.Weight
from
ProductAW b
JOIN
SalesOrderDetail a ON a.ProductID = b.ProductID
JOIN
SalesOrderHeader c ON c.SalesOrderID = a.SalesOrderID
JOIN
CustomerAW d ON d.CustomerID = c.CustomerID
WHERE
d.CompanyName IN ('Good Toys', 'Transport Bikes')
ORDER BY
c.SubTotal ASC;
//输出
CompanyName SubTotal Weight
Transport Bikes 602.19 13213.08
Transport Bikes 602.19 88.00
Good Toys 880.35 1061.40
Good Toys 880.35 988.83
查询#2:
SELECT
d.CompanyName, c.SubTotal, b.Weight
FROM
ProductAW b
JOIN
SalesOrderDetail a ON a.ProductID = b.ProductID
JOIN
SalesOrderHeader c ON c.SalesOrderID = a.SalesOrderID
JOIN
CustomerAW d ON d.CustomerID = c.CustomerID
WHERE
d.CompanyName IN ('Good Toys', 'Transport Bikes')
ORDER BY
c.SubTotal DESC;
结果:
CompanyName SubTotal Weight
Good Toys 880.35 1061.40
Good Toys 880.35 988.83
Transport Bikes 602.19 13213.08
Transport Bikes 602.19 88.00
ASC
子句中两个查询的差异仅为DESC
和ORDER BY
关键字。
请解释为什么Weight
列也会使用SubTotal
进行排序。
干杯,
答案 0 :(得分:3)
结果相同,只是记录的顺序更改,因为第一个查询按升序显示结果,而秒是按降序显示。
<强>更新强>
权重列没有与 SubTotal 一起排序,只是巧合,它们都按排序顺序显示。并确保通过插入另一个记录来测试查询结果,例如Transport Bikes 602.19 222222.00
这条新添加的记录会扭曲weight
的整个排序,我可以向您保证。
答案 1 :(得分:3)
重量列未排序。他们的订购是 undefined 。他们似乎是排序的,这只是一个巧合。
根据数据库引擎的实现,当未明确定义排序顺序时,行可能按照它们在表中的插入顺序出现。或不。这实际上取决于实施。
一般情况下,如果未明确指定排序,则不应对列的排序做出假设。
如果您希望第一个查询符合您显示的顺序,并使该顺序定义良好,则将ORDER BY
子句更改为:
ORDER BY c.SubTotal, Weight DESC
然后,如果要在第二个查询中反转排序,请使用:
ORDER BY c.SubTotal DESC, Weight
请注意,ASC是可选的,通常是默认的排序方向。
答案 2 :(得分:1)
weight
列未排序。排序由Subtotal
升序或降序发生
我觉得这里没有错。