2013-11-03 1 views
0

*** 규칙 : --- 어떤 종류의 조인도 사용하지 말고 상관 하위 쿼리를 사용하지 마십시오. --- 쉼표 결합을 사용하지 마십시오. --- 조인을 사용하면 해당 작업에 대한 점수가 없습니다. From 절은 하나의 테이블만을 참조합니다. --- 변수를 사용하지 마십시오.어떤 사람이 mysql에서이 하위 쿼리를 해결할 수 있도록 도와 줄 수 있습니까?

*** 여기 내 문제가 있습니다 : 누군가가 주문한 책의 책 ID와 제목을 표시하며 책은 SQL 책과 atabase 책입니다. 데이터베이스와 SQL을 필터링하려면 Topic_id를 사용하십시오. book_id별로 정렬하십시오.

는 *** 내 answwer는 :

select book_id, title 
    From a_bkinfo.books 
    Where book_id IN 
    (Select book_id 
    From a_bkinfo.book_topics 
    Where topic_id = 'DB') 
And book_id in 
    (Select book_id 
    From a_bkinfo.book_topics 
    Where topic_id = 'SQL') 
    order by book_id; 

나는이 문제에 -2를 받았다. 선생님의 답변 : -2 *이 책의 주문 여부를 확인하지 못했습니다.

***다음은 관련 테이블입니다. * 테이블 :

---- create 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) 

) 엔진 = INNODB;

---- create 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) 

) 엔진 = INNODB;

------ create books ------ 
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; 
판매의 가장 많은

답변

1
and book_id in 
    (select d.book_id 
     from a_bkorders.order_details d 
     where d.quantity > 0 
    ) 

디스플레이 책 (들)의 ID 및 제목; 동점을 포함하십시오. 이 쿼리의 경우 판매 된 총 수량을 사용하십시오. 어떤 조작이나 상관 서브 쿼리 가입없이 책

의 판매를 결정할 때,이 지정된 결과 집합을 반환합니다

SELECT b.book_id 
    , b.title 
    FROM a_bkinfo.books b 
WHERE b.book_id IN 
     ( 
     SELECT d.book_id 
      FROM a_bkorders.order_details d 
      GROUP BY d.book_id 
     HAVING SUM(d.quantity) = 
       (
        SELECT MAX(t.tot_quantity) 
        FROM ( 
          SELECT s.book_id 
           , SUM(s.quantity) AS tot_quantity 
          FROM a_bkorders.order_details s 
          GROUP BY s.book_id 
         ) t 
       ) 
     ) 

N.B. MySQL은 이 아니며 CHECK 제약 조건을 적용합니다.

+0

내가 생각하고 있던 것입니다. 동일한 테이블을 사용하는 경우이 문제는 어떻습니까? 판매량이 가장 많은 책의 ID와 제목을 표시하십시오. 동점을 포함하십시오. 이 쿼리의 경우 판매 된 총 수량을 사용하십시오. 책 판매 결정. – user2690891