查询语句实例

数据库:Northwind

题1:

--要求写一个sql,查询出单笔订单金额超过5000的订单号,客户ID,客户公司名称,订单金额,订单日期。
--思路:先写出计算单笔订单金额的sql,再联合客户表、订单表查询相关字段

--单笔订单金额
select OrderID,SUM(UnitPrice*Quantity*(1-Discount)) from [Order Details]
group by OrderID
having SUM(UnitPrice*Quantity*(1-Discount))>5000 

 

--方法一
with OrderInfo 
as(
select OrderID,SUM(UnitPrice*Quantity*(1-Discount)) as totalPrice from [Order Details] od
group by od.OrderID
having SUM(UnitPrice*Quantity*(1-Discount))>5000)

select o.OrderID as '订单编号',o.CustomerID as '客户ID',o.OrderDate as '订购日期',c.CompanyName as '公司名称',oi.totalPrice as '总金额' from OrderInfo oi,Orders o,Customers c 
where o.CustomerID = c.CustomerID and oi.OrderID = o.OrderID


--方法二
select [order details].orderId,orders.customerId,customers.companyName,sum(unitprice*Quantity*(1-discount))as 总价,orderdate
  from orders,customers,[order details]
   where orders.orderId=[order details].orderId and orders.customerId=customers.customerId--连接表条件
      group by [order details].orderId,orders.customerId,customers.companyName,orderdate
         having sum(unitprice*Quantity*(1-discount))>5000--单笔订单总额大于5000
--方法三
with query
as(
    select OrderID,SUM(UnitPrice*Quantity*(1-Discount)) as totalPrice from [Order Details] od
group by od.OrderID)

select
    o.OrderID,
    c.CustomerID,
    c.CompanyName,
    q.totalPrice,
    o.OrderDate
  from Customers c 
    inner join Orders o 
        on c.CustomerID = o.CustomerID
    inner join query q
        on o.OrderID = q.OrderID 
where q.totalPrice > 5000 

 

--题2,统计每个分类中,每个产品,每年的销售额;要求按分类升序排列,年度升序排列,销售额降序排列
--思路:首先是计算每个订单明细的订单价格;其次再将这个明细价格与分类表、产品表、订单表关联;
--然后按分类、年度分组查询,对价格进行求和;最后按要求排序即可

with query    --每个订单明细的订单价格
as(
    select od.OrderID,od.ProductID,(od.UnitPrice*od.Quantity*(1-od.Discount)) as totalPrice from Products p
    inner join [Order Details] od
    on od.ProductID = p.ProductID
),
query2
as(select Categories.CategoryID, --种类编号
        Categories.CategoryName, --种类名称
        Products.ProductName, --产品名称
        Orders.OrderDate, --订购日期
        query.totalPrice --每个订单明细的价格
    from Categories
    inner join(Products 
                inner join(Orders 
                            inner join query
                            on Orders.OrderID = query.OrderID)
                on Products.ProductID = query.ProductID)
        on Categories.CategoryID = Products.CategoryID)

select CategoryId,
      CategoryName,
      ProductName,
      DATEPART(YEAR,OrderDate) as YEAR,
      SUM(totalPrice) AS PRODUCTSALES
    from query2
  group by 
       categoryId,
       categoryName,
       ProductName,
       Datepart(year,orderdate)
  order by
       categoryId,
       datepart(year,orderdate),
       productSales desc

 

 

 

Northwind数据库关系:

转载于:https://www.cnblogs.com/qingsongwang/p/3283319.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值