根据过去30天来自不同组的销售额总和找出前3名客户-亚马逊访谈

时间:2018-11-27 15:50:22

标签: sql sql-server

这是我的Amazon SQL面试问题,我惨遭炸毁。

我们有3张桌子:

NSAttributedString length

预期的输出结果是在过去30天内从3个目录/业务部门中找到前3名客户。我尝试对总销售额进行划分,但最近30天的销售额和多次加入使我失望了。以下是要求的列:

customers    orders       catalog
cust_id      order_date   catalog_id
cust_name    order_id     catalog_name
             unit_price   cust_id
             quantity
             catalog_id

我了解基本的“按顺序划分”,但是我没有在带有日期戳的多个表上使用它。请帮助我理解这个概念。谢谢大家!

1 个答案:

答案 0 :(得分:0)

下面的查询应为您提供一个思路。

select * 
from (select c.cust_id,c.cust_name,ct.catalog_name,sum(o.unit_price * o.quantity) as total_sales, 
     ,dense_rank() over(partition by ct.catalog_name order by sum(o.unit_price * o.quantity) desc) as rnk
      from customers c
      join orders o on o.cust_id = c.cust_id
      join catalog ct on ct.catalog_id = o.catalog_id     
      --last 30 days filter
      where o.order_date >= date_add(day,-30,cast(getdate() as date)) and o.order_date < cast(getdate() as date)
      group by c.cust_id,c.cust_name,ct.catalog_name
     ) t 
where rnk <= 3