天天看点

sql order by 降序_SQL笔试题:product-order-store

根据下面的例表编写 SQL 查询语句

表 名 : [Product]

sql order by 降序_SQL笔试题:product-order-store

表名: [Order]

sql order by 降序_SQL笔试题:product-order-store

表名:[Store]

sql order by 降序_SQL笔试题:product-order-store

考题:

1. 请查找符合下列要求的产品,并按照产品价格降序排列:Category 为 CategoryA 且颜色为 yellow,或者 Weight 大于 5。

2. 请计算每一位客人的总购买金额(Amount),总购买订单数,总购买产品件数(Quantity),同一个客人同一天的订单算做一单,并筛选出总购买金额大于等于 800 的客人,按金额

降序排列。

3. 请给出每个城市(City)的总店铺数,总购买人数和总购买金额(Amount),包含无购买记录的城市。

4. 请查找购买过 CategoryA 产品的客人,并计算每一位客人的平均订单金额(Amount),一个订单编号(OrderID)算做一单。

5. 请查找每个城市(City)购买金额排名第二的客人,列出其购买城市,姓名,和购买金额。

6. 购买过ProductA且购买过ProductB的顾客人数。

7. 【SBA】某品牌产品 A 的销量在 2018 年第一季度 Q1 下降了 40%,相比于上一个季度。2018 年第一季度,该品牌有一款新产品 B 上市,无其他市场推广。请设计数据报表,来分析产品 A 销量下降的原因。

答案:

#1.请查找符合下列要求的产品,并按照产品价格降序排列:Category 为 CategoryA 且颜色为 yellow,或者 Weight 大于 5。

select *
from product
where category='categoryA' and color='yellow'
or weight>5
order by price desc;
           
sql order by 降序_SQL笔试题:product-order-store

#2.请计算每一位客人的总购买金额(Amount),总购买订单数,总购买产品件数(Quantity),同一个客人同一天的订单算做一单,并筛选出总购买金额大于等于 800 的客人,按金额降序排列。

分析思路:

[ordertable表]

#总购买金额=sum(amount)

#总订单数:按照客人name分组,统计distict orderdate

#总购买产品件数=按照名字分组,sum(quantity)

#分组之后的条件:总购买金额大于等于 800 :sum(amount)>=800

#降序排列:order by sum(amount) desc

select name,sum(amount) as 总购买金额,count(distinct orderdate) as 总购买订单数,sum(quantity) as 总购买产品件数
from ordertable
group by name
having sum(amount)>=800
order by sum(amount) desc;
           
sql order by 降序_SQL笔试题:product-order-store

#3.请给出每个城市(City)的总店铺数,总购买人数和总购买金额(Amount),包含无购买记录的城市。

分析思路:

#每个城市:按照city分组统计,

#总店铺数=count(Store)

#总购买人数=count(distict Name)

#总购买金额=sum(Amount)

#包括无购买记录的城市,Order和Store右联结,on a.store=b.store

select t1.city,count(distinct t1.store)as 总店铺数,count(distinct t1.`name`) as 总购买人数,sum(amount) as 总购买金额
from
(select 
a.store,a.city,b.`name`,b.amount
from store a left join ordertable b
on a.store = b.store) t1
group by t1.city
#注意,子查询中不能使用select *,因为两表连接之后有两个store列,需要指定字段
           
sql order by 降序_SQL笔试题:product-order-store

4. 请查找购买过 CategoryA 产品的客人,并计算每一位客人的平均订单金额(Amount), 一个订单编号(OrderID)算做一单。

分析思路:

#[product]category='categoryA'

#先根据categoryA找到购买productA,然后在此基础上对ordertable进行查询,条件product in (),按照name分组。

#平均金额=总金额/单数,=sum(amount)/count(orderid)

select name,sum(amount)/count(orderid) as 平均订单金额
from ordertable
where product in (select product from product where category='categoryA')
group by name
           
sql order by 降序_SQL笔试题:product-order-store

#5.请查找每个城市(City)购买金额排名第二的客人,列出其购买城市,姓名,和购买金额。

#每个城市:需要按照city分组,【store】

#购买金额=sum(amount)【ordertable】

#排名第二,order by 购买金额 desc,limit 1

#购买城市【store】,姓名【ordertable】,购买金额【ordertable】,右联结

select t1.city,t1.`name`,t1.amount_all,t1.rank
from
(select a.city,b.`name`,sum(b.amount) as 'amount_all',
Row_number() over(partition by a.city order by sum(b.amount) desc) as 'rank'
from
store a left join ordertable b on a.store = b.store
group by a.city,b.`name`) t1
where t1.rank=2
           
sql order by 降序_SQL笔试题:product-order-store

6.购买过ProductA且购买过ProductB的顾客人数。

#思路一:筛选出购买productA的客户名字,然后筛选出购买productB的客户名字,用内联结条件为a.name=b.name

select count(a.name)
from (select name from ordertable where product='ProductA') a 
inner join
(select name from ordertable where product='ProductB') B
on a.name=b.name
or product='ProductB')
           

#思路二:先找到购买productB的客户名字,然后利用两个条件:product='productA' 和name=购买productB的客户名字

select count(name)
from ordertable
where product='productA'  and name in (select name from ordertable where product='productB')
           

7.【SBA】某品牌产品A的销量在2018年第一季度Q1下降了40%,相比于上一个季度。2018年第一季度,该品牌有一款新产品B上市,无其他市场推广。请设计数据报表,来分析产品A销量下降的原因。

解题思路:数据报表应包含,产品类型、销售日期、销售数量,据此可以查看该品牌产品B上市是否对产品A销量造成影响:

  • 如果产品B的销量大于等于产品A减少的销量,说明产品A销量下降的原因是产品B的上市;
  • 如果产品B的销量小于产品A减少的销量,说明该品牌市场占有率下降,需要尽快分析原因,做出应对措施。