0

我有 2 张桌子:

  • Customers表(有一个customer_id列)
  • Orders表(有customer_idorder_date列)

有没有一种方法可以在按订单计数排序的单个查询中获取每个客户的所有订单计数以及最新订单日期,而不使用相关子查询

我已经有了这个:

SELECT C.customer_id, O.order_date, COUNT(O.order_id) AS orders_count 
FROM customers AS C
LEFT JOIN orders AS O ON O.customer_id = C.customer_id
GROUP BY C.customer_id
ORDER BY COUNT(O.order_id) DESC, O.order_date DESC 

但是,我只得到客户第一次下订单的日期。

4

2 回答 2

1

使用MAX()聚合函数:

SELECT C.customer_id, MAX(O.order_date), COUNT(O.order_id) AS orders_count 
FROM customers C LEFT JOIN
     orders O
     ON O.customer_id = C.customer_id
GROUP BY C.customer_id
ORDER BY COUNT(O.order_id) DESC, MAX(O.order_date) DESC 
于 2019-07-26T11:43:57.950 回答
0

如果 mysql 8.0+ 版本和 10.2 的 maria db 允许 row_number() 这将解决您的问题

select * from (SELECT C.customer_id, O.order_date, COUNT(O.order_id) AS orders_count,
 row_number() over(partition  by  C.customer_id order by O.order_date DESC) rn
FROM customers AS C 
LEFT JOIN orders AS O ON O.customer_id = C.customer_id
 group by  C.customer_id, O.order_date
) a where a.rn=1
于 2019-07-26T11:44:29.843 回答