SQL - 高级"取证"查询

时间:2014-05-12 18:11:26

标签: sql sql-server

我想知道哪位顾客购买了最多的商品总数,没有日期范围

这些是我的专栏:

customers.customerid
orders.orderid
orderdetails.productid
orderdetails.quantity

但我被困在这里:

  • 从customerid开始
  • 从customerid拉出orderid(使用我假设的联接)
  • 拉出数量和个别产品(另一个连接?)

从订单中选择*返回196条记录。

从订单中选择不同的customerid返回74条记录,这意味着74'不同'客户下订单

如何完成此操作?

1 个答案:

答案 0 :(得分:0)

首先,找出每个客户订购的商品数量。为此,您必须加入订单明细和订单表:

select o.customerid, sum(od.quantity) as nbr_items
from orderdetail od
  inner join orders o
    on o.orderid = od.orderid
group by o.customerid

但是,如果您也需要客户名称,那么您也必须加入客户表:

select o.customerid, sum(od.quantity) as nbr_items
from orderdetail od
  inner join orders o
    on o.orderid = od.orderid
  inner join customer c
    on c.customerid = o.customerid
group by o.customerid

但是,当然,你专门向客户询问了最多的项目数量,所以按总数减少排序:

select o.customerid, sum(od.quantity) as nbr_items
from orderdetail od
  inner join orders o
    on o.orderid = od.orderid
  inner join customer c
    on c.customerid = o.customerid
group by o.customerid
order by 2 DESC

使用TOP N功能只获得第一个:

select top 1 o.customerid, sum(od.quantity) as nbr_items
from orderdetail od
  inner join orders o
    on o.orderid = od.orderid
  inner join customer c
    on c.customerid = o.customerid
group by o.customerid
order by 2 DESC