Products表为产品信息表含有字段prod_id产品id、prod_name产品名称
prod_id | prod_name |
a0001 | egg |
a0002 | sockets |
a0013 | coffee |
a0003 | cola |
a0023 | soda |
OrderItems表为订单信息表含有字段order_num订单号和产品id prod_id
prod_id | order_num |
a0001 | a105 |
a0002 | a1100 |
a0002 | a200 |
a0013 | a1121 |
a0003 | a10 |
a0003 | a19 |
a0003 | a5 |
【问题】
使用 OUTER JOIN 联结 Products 表和 OrderItems 表,返回产品名称(prod_name)和每一项产品的总订单数(不是订单号),并按产品名称升序排序。
【示例结果】
返回产品名称prod_name和订单号订单数orders
prod_name | orders |
coffee | 1 |
cola | 3 |
egg | 1 |
sockets | 2 |
soda | 0 |
【示例解析】
返回产品和产品对应的实际支付的订单数,但是无实际订单的产品soda也返回,最后根据产品名称升序排序。
本题涉及了表连接、子查询、聚合函数和内置函数ifnull的知识。
格式:ifnull(exp1,exp2),如果exp1不为null,就返回exp1,否则返回exp2。
select
prod_name,
ifnull(orders,0) orders
from
Products
left join
(select
prod_id,
count(*) orders
from
OrderItems
group by
prod_id) a
on Products.prod_id=a.prod_id
order by
prod_name;