2016-04-27 27 views
1

私はSakila sample databaseと一緒に働いていて、国ごとに最も多く視聴された映画を取得しようとしています。これまでのところ、私は次のクエリでそのIDを指定した特定の国の最も見られたフィルムを得ることができました:MySQLとサブクエリとの関連付け

SELECT 
    F.title, CO.country, count(F.film_id) as times 
FROM 
    customer C 
INNER JOIN 
    address A ON C.address_id = A.address_id 
INNER JOIN 
    city CI ON A.city_id = CI.city_id 
INNER JOIN 
    country CO ON CI.country_id = CO.country_id 
INNER JOIN 
    rental R ON C.customer_id = R.customer_id 
INNER JOIN 
    inventory I ON R.inventory_id = I.inventory_id 
INNER JOIN 
    film F ON I.film_id = F.film_id 
WHERE 
    CO.country_id = 1 
GROUP BY 
    F.film_id 
ORDER BY 
    times DESC 
LIMIT 1; 
私はこのクエリまたは別の形で同様のものを使用する必要がありますことをsupose

クエリは、私は思うことができたし、それを行う方法を見つけることが完全にできませんでした。

ありがとうございます!

答えて

2

私は認めますが、これはまあまあの質問です。しかし、うまく、それが動作する限り。

説明:

  • サブクエリ:あなたがすでに持っているとほぼ同じ。 WHERELIMITがありません。国
  • GROUP_CONCAT(title ORDER BY times DESC SEPARATOR '|||')ごとにグループ化されたものの映画カウント
  • 国ごとの結果のリストで、その結果、最初に最も視聴タイトルで、その「行」ですべてのタイトルを提供します。セパレータはタイトルに決して出現しないと確信している限り重要ではありません。文字列の最初の部分で
  • SUBSTRING_INDEX('...', '|||', 1)結果、それはこの場合には、|||を見つけるまで最初の(したがって最も見て)タイトル

全クエリ:概念の

SELECT 
    country_name, 
    SUBSTRING_INDEX(
     GROUP_CONCAT(title ORDER BY times DESC SEPARATOR '|||'), 
     '|||', 1 
    ) as title, 
    MAX(times) 
FROM (
    SELECT 
     F.title AS title, 
     CO.country_id AS country_id, 
     CO.country AS country_name, 
     count(F.film_id) as times 
    FROM customer C INNER JOIN address A ON C.address_id = A.address_id 
    INNER JOIN city CI ON A.city_id = CI.city_id 
    INNER JOIN country CO ON CI.country_id = CO.country_id 
    INNER JOIN rental R ON C.customer_id = R.customer_id 
    INNER JOIN inventory I ON R.inventory_id = I.inventory_id 
    INNER JOIN film F ON I.film_id = F.film_id 
    GROUP BY F.film_id, CO.country_id 
) AS count_per_movie_per_country 
GROUP BY country_id 

証明(サブクエリが正しい限り):SQLFiddle

+0

これは正しく動作していないようですが、おそらく私のサブクエリーが正しくないためです。 – lluchmk

+1

あなたは正しいです。私は 'GROUP BY'国を逃しました。私は自分の答えを更新しました。再チェックできますか? –

+0

それだけです!ありがとう、それは正しく働いている – lluchmk

関連する問題