MySQL - 用更高效的东西替换子查询?

时间:2014-02-26 23:20:35

标签: mysql

我正在尝试计算每个客户下订单的数量以及上次订单的日期。我目前的疑问是:

select customerID, count(*) as totalOrders, (
    select orderDate 
    from orders 
    where customerID=o.customerID 
    order by orderDate desc 
    limit 1
) lastOrder 
from orders o
group by customerID

这有效,但我不确定子查询是否是运行查询的最有效方式。

有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

“子查询”可以解决的问题也可以通过“加入”来完成,但这取决于可能更高效的特定情况。

在您的特定情况下,您不需要执行子查询,因为您可以使用MAX函数直接获取分组客户的最后日期。

SELECT customerID, COUNT(*) AS totalOrders, MAX(orderDate) AS lastOrder 
FROM orders 
GROUP BY customerID