我有一个包含以下各行的表: 客户ID 市 transaction_id 日期
我想拉出在一定时间内交易次数最多(count(transaction_id))的城市。客户可以在多个城市进行交易。
实现此目标的正确语法是什么?
更新: 客户A在纽约可以有5笔交易,在波士顿可以有10笔交易。我只希望退回波士顿10笔交易的客户记录。我该如何做?对于每个customer_id具有相同交易次数的城市,该怎么办?
答案 0 :(得分:1)
如果您只需要排名靠前的城市名称,则可以使用以下方法
select city,count(transaction_id) as cnt
From YourTable
where date=condition --- that you need
group by city
order by cnt desc
limit 1
如果您需要按客户指定的最高城市名称,请使用row_number()
with cte as
(
select customerid,city,count(*) as cnt
from table_name group by customerid,city
), cte1 as
(
select * ,row_number()over(partition by cusomerid order by cnt desc) rn
from cte
) select * from cte1 where rn=1