SQL练习题解析:识别利润率低于55%的书籍及近期销量
嘿,这就帮你把这个出自《SQL with an Introduction to PL/SQL》的练习题内容按要求整理好,用清晰的Markdown格式呈现:
书籍利润率与近期销量分析任务
需求说明
我们需要完成以下两个核心任务:
- 找出**利润率低于55%**的书籍
- 统计此类书籍的近期销量
关联规则
检索时需按以下逻辑关联三张表:Books 表通过 ISBN 关联 Orderitems 表,Orderitems 表通过 ORDER# 关联 Orders 表
涉及的Books表结构
| ISBN | TITLE | PUBDATE | PUBID | COST | RETAIL | CATEGORY |
|---|---|---|---|---|---|---|
| 1059831198 | BodyBuilding in 10 Minutes a Day | 21-JAN-01 | 4 | 18.75 | 39.95 | Fitness |
| 0401140733 | ... | ... | ... | ... | ... | ... |
注:利润率计算公式为
(RETAIL - COST)/RETAIL * 100%,筛选条件为该值小于55%
SQL查询语句
以下是满足需求的SQL查询(假设"近期"定义为最近30天,可根据业务需求调整日期范围):
SELECT b.ISBN, b.TITLE, ROUND(((b.RETAIL - b.COST)/b.RETAIL)*100, 2) AS PROFIT_MARGIN, SUM(oi.QUANTITY) AS TOTAL_RECENT_SALES FROM Books b INNER JOIN Orderitems oi ON b.ISBN = oi.ISBN INNER JOIN Orders o ON oi.ORDER# = o.ORDER# WHERE ROUND(((b.RETAIL - b.COST)/b.RETAIL)*100, 2) < 55 -- 调整此处的日期条件来定义"近期",比如最近90天改为 SYSDATE - 90 AND o.ORDERDATE >= SYSDATE - 30 GROUP BY b.ISBN, b.TITLE, ((b.RETAIL - b.COST)/b.RETAIL)*100 ORDER BY PROFIT_MARGIN ASC;
给管理层的结果总结
- 该查询返回所有利润率不足55%的书籍关键信息:ISBN、书名、精确到两位小数的利润率,以及近30天的总销量
- 结果按利润率从低到高排序,便于管理层快速定位利润表现最差的书籍及其销售情况
- 若需要调整"近期"的时间范围,仅需修改查询中的
SYSDATE - 30即可,操作简单灵活
内容的提问来源于stack exchange,提问作者Taimur Falak
相关产品推荐
相关产品推荐

