2017-08-22 4 views
1

こんにちはいくつかのSQL演習を解決していますが、この質問では、販売されたチケットに基づいて人気のある映画が返される必要があります。SQLまたはSqliteを使用して映画の人気を計算する

+----+----------------+---------------+ 
    | id |  Title  | Director | 
    +----+----------------+---------------+ 
    | 30 | Ducks   | Donalds  | 
    | 40 | Dummy   | benjamin  | 
    | 50 | bunny   | Davut Rechnif | 
    +----+----------------+---------------+ 

予約:二つのテーブル

作品があります

+----+----------+---------+------------+ 
    | id | movie_id | num_tic | cinema | 
    +----+----------+---------+------------+ 
    | 1 |  30 |  30 | Cineduck | 
    | 2 |  50 |  3 | Threenema | 
    | 3 |  30 |  1 | Threenema | 
    | 4 |  40 |  17 | Cinnamon | 
    | 5 |  30 |  8 | Cineduck | 
    | 6 |  40 |  25 | Threenema | 
    | 7 |  30 |  11 | Cineduck | 
    +----+----------+---------+------------+ 

2つのテーブルに基づいてクエリがすべての映画のために販売チケット数を計算しなければなりませんし、その後ですべての映画をランク付け人気。最終テーブルは、sold_tick列で降順で並べ替える必要があります。たとえば、下記の表は出力例です。販売されたチケットの数が同数の場合、ローはid列で昇順に並べ替える必要があります。

+----+-------+-----------+ 
    | id | Title | Sold_tick | 
    +----+-------+-----------+ 
    | 30 | Ducks |  50 | 
    | 40 | Dummy |  42 | 
    | 50 | bunny |   3 | 
    +----+-------+-----------+ 

答えて

2

あなたはこのようにサブクエリを使用することができます。

select 
    *, 
    (select sum(num_tic) from reservations where reservations.movie_id=movies.id) sold_tick 
from movies order by sold_tick desc 
2

ソリューションとなります。

SELECT t1.movie_id, t2.Title, t1.Sold_tick FROM (
    SELECT movie_id, SUM(num_tic) AS Sold_tick FROM Reservations 
    GROUP BY movie_id 
    ORDER BY Sold_tick 
    ) t1 
INNER JOIN Movies t2 ON t1.movie_id = t2.id 
ORDER BY t1.Sold_tick DESC 
関連する問題