表 orders 定义如下:order_id(订单编号),customer_id(客户编号),order_date(下单日期)
有如下几条记录:
order_id customer_id order_date
1 1 2019-06-24
2 2 2019-04-23
3 3 2019-03-21
4 3 2019-04-29
5 4 2019-08-12
6 4 2019-09-14
在表 orders 中找到订单数最多客户对应的 customer_id 。
预计的输出结果:
customer_id
3
4
解决:
SELECT customer_id
FROM (
SELECT customer_id
,c
,rank() over(order by c desc) as rk
FROM (
SELECT customer_id
,count(*) AS c
FROM orders
GROUP BY customer_id
ORDER BY count(*) DESC
) a
) a
WHERE rk = 1
;
备注:建表和数据
create table orders(order_id int,customer_id int,order_date datetime);
insert into orders values(1,1,'2019-06-24');
insert into orders values(2,2,'2019-04-23');
insert into orders values(3,3,'2019-03-21');
insert into orders values(4,3,'2019-04-29');
insert into orders values(5,4,'2019-08-12');
insert into orders values(6,4,'2019-09-14');