多表关联查询:筛选paper封面物品并按总价(物品价+封面价)排序
解决这个SQL查询问题的方案
我来帮你搞定这个查询需求,咱们结合你的表结构和数据一步步来实现:
首先,咱们需要关联price和covers两张表来获取封面的价格,然后筛选出仅用paper封面的物品,计算物品价格+封面价格的总和,最后按这个总和排序。
最终SQL语句(针对单物品单记录的场景)
SELECT p.itemId, p.name, p.price AS item_price, c.cover, c.price AS cover_price, (p.price + c.price) AS total_price FROM price p INNER JOIN covers c ON p.cover = c.cover WHERE p.cover = 'paper' ORDER BY total_price DESC;
如果需要对相同物品的重复记录求和(比如存在重复itemId的情况)
SELECT p.itemId, p.name, SUM(p.price + c.price) AS total_sum FROM price p INNER JOIN covers c ON p.cover = c.cover WHERE p.cover = 'paper' GROUP BY p.itemId, p.name ORDER BY total_sum DESC;
语句拆解说明
- 表关联:用
INNER JOIN把price(别名p)和covers(别名c)通过共同的cover字段关联,这样就能拿到每个物品对应的封面成本。 - 筛选条件:
WHERE p.cover = 'paper'确保只保留使用paper封面的物品。 - 总和计算:
(p.price + c.price)直接计算单个物品的总价,用AS给列起别名方便后续排序和查看;如果有重复物品记录,就用SUM()来汇总总价。 - 排序:
ORDER BY total_price DESC(或total_sum DESC)按总价从高到低排序,要是想升序排列去掉DESC就行。
测试你的数据会得到的结果
执行第一个语句后,结果如下:
| itemId | name | item_price | cover | cover_price | total_price |
|---|---|---|---|---|---|
| 1 | Book | 30 | paper | 5 | 35 |
| 3 | Flower | 10 | paper | 5 | 15 |
内容的提问来源于stack exchange,提问作者D. Make
相关产品推荐
相关产品推荐

