如何更优雅地编写此 SQL 查询(加入 + 最大查询)

How to write this SQL query more elegantly ( joining + max query )

好的,我正在使用 w3school 中的以下示例

https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all

我想获取订购金额的日期

SELECT OrderDate 
FROM Orders
WHERE OrderID = (SELECT OrderID 
                 FROM OrderDetails 
                 WHERE Quantity = (SELECT MAX(Quantity)  
                                   FROM OrderDetails));

这行得通,但我的直觉告诉我,我需要使用 joining 或 having ??

您想要数量最大的订单日期。

看起来您不需要两级子查询。您可以改用行限制子查询:

select orderdate 
from orders
where orderid = (select orderid from from orderdetails order by quantity desc limit 1)

这个更短,如果有多个订单具有相同的最大数量也不会失败(而您的原始代码会失败,因为子查询 return 不止一行)。

另一种方法使用 window 函数:

select o.orderdate
from orders o
inner join (
    select od.*, rank() over(order by quantity desc) rn
    from orderdetails od
) od on od.orderid = o.orderid
where od.rn = 1

这将正确处理顶级关系,因为它将 return 所有关系(而第一个查询 return 只是其中一个)。

我认为这是更简洁的解决方案!

此致

select max(od.quantity) as MaxOrder,orderdate
from orderdetails as od inner join orders as o on od.orderid=o.orderid