2017-10-27 14 views
0

一部の国のビデオが一部の著者によって撮影されています。私は国別にグループ分けし、その国からのビデオを最大の長さで表示する必要があります。著者の名前です。最大の長さのビデオを選択する方法はわかっていますが、著者の名前を追加する方法はわかりません。SQL Server 2005クエリヘルプ(グループ化)

ここには、その国からの最大再生時間のビデオを示すスクリプトがあります。私が必要とするのは、著者を追加することだけです。

SELECT country.country_id, max(video.duration) 
FROM VIDEO 
JOIN COUNTRY ON country.country_id = video.country_id 
JOIN AUTHOR ON author.author_id = video.author_id 
GROUP BY country.country_id 
+0

これはどのデータベースを追加してください、解決方法は使用しているかによって異なります。 – Andrew

答えて

1

は、私はあなたがcountryから主キー以外の任意の属性をしたくないとcountry_idvideoに既にあるので、countryJOINは、必要ではないと信じています。

一つの解決策は、MAX

SELECT VIDEO.*, AUTHOR.name 
FROM VIDEO v1 
JOIN AUTHOR ON author.author_id = v1.author_id 
WHERE video.duration = (
     SELECT max(v2.duration) 
     FROM VIDEO v2 
     WHERE v2.country_id = v1.country_id) 

WHEREと依存サブクエリを使用してvideoから適切な行を選択することで、ANあなたが依存サブクエリを避けたいならば、あなたは使用して、次のアプローチを使用することができますGROUP BY

SELECT VIDEO.*, AUTHOR.name 
FROM VIDEO v1 
JOIN AUTHOR ON author.author_id = v1.author_id 
JOIN (
    SELECT v.country_id, max(v.duration) maxduration 
    FROM VIDEO v 
    GROUP BY v.country_id 
) t ON v1.country_id = t.country_id and t.maxduration = v1.duration 
+1

最大再生時間が同じ動画が2つある場合はどうなりますか? –

+0

両方の動画が結果に表示されます –

0

これを解決するにはいくつかの方法がありますが、ROW_NUMBERは簡単な方法の1つです。

SELECT * 
FROM (
    SELECT 
    ROW_NUMBER() OVER (PARTITION BY c.country_id ORDER BY v.duration) AS rn, 
     * 
    FROM VIDEO AS v 
    JOIN AUTHOR AS a ON a.author_id = v.author_id 
) AS t 
WHERE t.rn = 1