编写查询以显示基于每个供应商的最高价格的图书的书籍代码,书名,供应商名称和价格

时间:2014-05-28 11:27:12

标签: mysql sql

编写查询以显示基于每个供应商的最高价格的图书的书籍代码,书名,供应商名称和价格。 supplier details table

book details table

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)

输出

enter image description here

显示输出,但书名和价格不正确。

2 个答案:

答案 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_codebook_title。然而,有两本书需要这个价格,应该选择哪一本?如果没有关于如何做出这种选择的指导原则,则会返回具有此价格的两本书。

答案 1 :(得分:0)

您可以在不使用子查询的情况下执行此操作。

试试这个

http://sqlfiddle.com/#!2/fc5a5/6

它有2个查询。 首先它也是book_code分组,因为book_code是不同的。

在第二次查询中,仅基于提供的1,book_title和price的3个组完成。book_code将是最高的book_code。