编写查询以显示基于每个供应商的最高价格的图书的书籍代码,书名,供应商名称和价格。
SELECT book_code,
book_title,
supplier_name,
price
FROM lms_book_details
JOIN lms_suppliers_details using(supplier_id)
GROUP BY supplier_name HAVING price IN
(SELECT max(price)
FROM lms_book_details
GROUP BY supplier_id)
输出
显示输出,但书名和价格不正确。
答案 0 :(得分:2)
第一步是获得每个供应商的最高价格:
SELECT supplier_id, MAX(Price) AS Price
FROM lms_book_details
GROUP BY supplier_id
然后,您可以查询以获取所有图书详细信息
SELECT bd.book_code,
bd.book_title,
sd.supplier_name,
bd.price
FROM lms_book_details AS bd
JOIN lms_suppliers_details AS sd
ON sd.supplier_id = bd.supplier_id;
所以只需要将两者结合起来过滤第二个查询的结果,只包含第一个查询的结果:
SELECT bd.book_code,
bd.book_title,
sd.supplier_name,
bd.price
FROM lms_book_details AS bd
JOIN lms_suppliers_details AS sd
ON sd.supplier_id = bd.supplier_id
JOIN
( SELECT supplier_id, MAX(Price) AS Price
FROM lms_book_details
GROUP BY supplier_id
) AS MaxPrice
ON MaxPrice.supplier_id = bd.supplier_id
AND MaxPrice.Price = bd.Price;
<强>附录强>
在SQL Fiddle上重新创建示例数据后,然后运行上面的查询,您将获得以下结果
BOOK_CODE BOOK_TITLE SUPPLIER_NAME PRICE
BL0000002 Java The compete reference ROSE BOOK STORE 750
BL0000006 Java The compete reference ROSE BOOK STORE 750
BL0000004 Java The compete reference SINGAPORE SHOPPEE 750
BL0000009 Fire KAVARI STORE 999
我认为“ROSE BOOK STORE”是您所指的副本,但请接受您的指示:
根据每个供应商编写查询以显示图书的书籍代码,书名,供应商名称和价格。
“ROSE BOOK STORE”的最高价格是750.00,所以我们需要获得这个价格的书的book_code
,book_title
。然而,有两本书需要这个价格,应该选择哪一本?如果没有关于如何做出这种选择的指导原则,则会返回具有此价格的两本书。
答案 1 :(得分:0)
您可以在不使用子查询的情况下执行此操作。
试试这个
http://sqlfiddle.com/#!2/fc5a5/6
它有2个查询。 首先它也是book_code分组,因为book_code是不同的。
在第二次查询中,仅基于提供的1,book_title和price的3个组完成。book_code将是最高的book_code。