0

使用相同的表如何解决这个问题。显示销量最多的书籍的ID和书名;包括关系。对于此查询,使用已售总数量。

这是我所拥有的,但这是错误的:

select book_id, title
From a_bkinfo.books
Where book_id IN
   (select book_id
    From a_bkorders.order_details
    where quantity IN
       (Select SUM(quantity) 
        From a_bkorders.order_details
      )
 );

表:---- 创建 order_details ------

  create  table   a_bkorders.order_details (
  order_id          integer          not null 
 , order_line        integer          not null 
 , book_id           integer          not null 
 , quantity          integer          not null 
 , order_price       numeric(6,2)     not null   
 , constraint bk_orderline_pk         primary key (order_id, order_line)
 , constraint bk_orderline_order_fk   foreign key (order_id) 
         references a_bkorders.order_headers(order_id) on delete cascade
 , constraint bk_orderline_book_fk    foreign key (book_id )  
       references a_bkinfo.books(book_id)
 , constraint bk_quantity_ck          check (quantity > 0) 
 , constraint bk_ordprice_ck          check (order_price >= 0) 
 )engine = INNODB;

---- 创建 book_topics ----

 create  table a_bkinfo.book_topics (
 book_id           integer          not null
 , topic_id          varchar(5)       not null  
 , constraint bk_book_topics_pk        primary key (book_id, topic_id)
 , constraint bk_books_topics_fk      foreign key(topic_id) 
       references a_bkinfo.topics(topic_id)
 , constraint bk_books_id_fk          foreign key(book_id) 
       references a_bkinfo.books(book_id) 
 )engine = INNODB;

--------- 创建书籍 ---------

 create table a_bkinfo.books (
 book_id           integer          not null
 , title             varchar(75)      not null 
 , publ_id           integer          null
 , year_publd        integer          not null
 , isbn              varchar(17)      null
 , page_count        integer          null  
 , list_price        numeric(6,2)     null  
 , constraint bk_books_pk             primary key (book_id)
 , constraint bk_books_publ_fk        foreign key(publ_id) 
       references a_bkinfo.publishers  (publ_id)
 , constraint book_id_range           check (book_id > 1000)
 , constraint bk_page_count_ck        check (page_count >= 0)
 , constraint bk_price_ck             check (list_price >= 0)             
 , constraint bk_books_year_ck        check (year_publd >= 1850)
 )engine = INNODB;
4

2 回答 2

0

您的问题有一些解决方案,但我更喜欢使用 JOIN 而不是使用子查询并避免使用运算符“IN”。

  SELECT book_id, title
    FROM books
    JOIN (  SELECT book_id 
              FROM order_details
          GROUP BY book_id
          ORDER BY SUM(quantity) DESC
             LIMIT 1 ) AS O
   USING (book_id)
于 2013-11-03T06:52:56.173 回答
0

像这样的东西:

select book_id, title
From a_bkinfo.books
Where book_id IN
    (Select book_id, SUM(quantity) as max_q
    From a_bkorders.order_details
    group by book_id
    order by max_q DESC
    );
于 2013-11-03T05:15:00.877 回答