SQL Server作业求助:查询同价书籍代码对及价格并排序
嘿,我来帮你解决这个书籍配对的问题!要找出所有价格相同的书籍对,还要按第一个代码主排序、第二个代码次排序的要求展示,核心是先把相同价格的书籍归为一组,再生成不重复的配对,下面分两种常见场景给你具体实现方案:
SQL 解决方案(数据库场景)
假设你的书籍数据存在名为books的表中,包含book_code(书籍代码)和price(价格)两个字段,可以通过自连接实现需求:
SELECT b1.book_code AS first_book_code, b2.book_code AS second_book_code, b1.price FROM books b1 JOIN books b2 ON b1.price = b2.price AND b1.book_code < b2.book_code -- 避免重复配对,比如只保留0200&7559,不生成7559&0200 ORDER BY b1.book_code ASC, b2.book_code ASC;
逻辑说明:
- 自连接同一张表,用
price相等作为关联条件,确保只匹配价格相同的书籍 b1.book_code < b2.book_code的条件能避免生成重复的反向配对,保证每对只出现一次ORDER BY直接指定主排序键为第一个书籍代码,次要排序键为第二个,完全符合要求
Python 解决方案(本地数据处理场景)
如果是用Python处理本地的书籍数据(比如列表、CSV导入的数据),可以通过分组+配对的方式实现:
# 示例书籍数据(可替换为你实际的数据源) books = [ {"book_code": "0200", "price": 8.00}, {"book_code": "7559", "price": 8.00}, {"book_code": "1234", "price": 10.99}, {"book_code": "5678", "price": 10.99}, {"book_code": "9012", "price": 8.00} ] # 按价格分组,把相同价格的书籍代码归到同一组 from collections import defaultdict price_groups = defaultdict(list) for book in books: price_groups[book["price"]].append(book["book_code"]) # 生成符合要求的不重复配对 result = [] for price, codes in price_groups.items(): # 先对当前价格组的书籍代码排序,保证后续配对有序 sorted_codes = sorted(codes) # 生成i<j的配对,避免重复 for i in range(len(sorted_codes)): for j in range(i + 1, len(sorted_codes)): result.append({ "first_book_code": sorted_codes[i], "second_book_code": sorted_codes[j], "price": price }) # 最后按要求排序(生成时已保证有序,这里做双重保险) result.sort(key=lambda x: (x["first_book_code"], x["second_book_code"])) # 按示例格式输出结果 for pair in result: print(f"书籍{pair['first_book_code']}和{pair['second_book_code']}为一对,二者价格均为{pair['price']:.2f}美元")
逻辑说明:
- 用
defaultdict快速完成价格分组,把相同价格的书籍代码聚合到一起 - 对每个价格组的代码先排序,再通过双重循环生成不重复的配对(
i<j确保每对只出现一次) - 最终排序后输出的结果完全符合“第一个代码主排序、第二个代码次排序”的要求
内容的提问来源于stack exchange,提问作者ReadingIsHard
相关产品推荐
相关产品推荐

