2017-11-29 15 views
1

私はいくつかのSQLを学んでいます。私はより良い学習のためにいくつかの練習をしています。私はGROUP BY関数に問題があります。 私はいくつかの基本的な俳優表(タイトル、年、文字名、名前)と映画(タイトル、年)を持っています。私の仕事は、同じ映画の中で複数のキャラクターを演じたアクターの名前を列挙することです。 これは私が試したコードです:SQL GROUP BYとHAVINGの問題

SELECT A.Name 
FROM Actors A, Movies M 
WHERE A.Title = M.Title AND A.Year = M.Year 
GROUP BY A.CharacterName HAVING COUNT(*) > 1; 

私はこのエラーを取得するしかし:

error 1055(42000):Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'new.A.Name' which is not functionally dependent on columns in GROUP BY clase; this is incompatible with sql_mode = only_full_group_by.

答えて

2

movietitleyearで一意に識別され、「俳優」がnameによって識別される場合は...必要ありません通常はmovieテーブルへの結合が必要です。

私たちは、このようなクエリで複数のcharacter_nameと同じ映画に登場した俳優を識別できます。私たちは、私たちが必要としないSELECTリストから式を削除することができ

SELECT a.title 
    , a.year 
    , a.name 
    FROM actors a 
GROUP 
    BY a.title 
    , a.year 
    , a.name 
HAVING COUNT(DISTINCT a.character_name) > 1 

を。俳優の名前だけが必要な場合

SELECT a.name 
    FROM actors a 
GROUP 
    BY a.title 
    , a.year 
    , a.name 
HAVING COUNT(DISTINCT a.character_name) > 1 

これは、同じアクター名を複数回返す可能性があることに注意してください。

"Mike Myers"は、 "Austin Powers"シリーズの複数の映画に複数の文字として登場しました。最初のクエリでは、俳優と共に映画がリストされます。このクエリは、映画の情報をSELECTリストから削除するだけですが、映画ごとに「Mike Myers」を複数回残しています。

重複を削除することが仕様の一部である場合は、クエリを調整することができます。


我々はmovieテーブルへの結合が必要な場合は、私が参加し、操作のための古い学校のコンマ構文を捨て、代わりに、JOINキーワードを使用してお勧めします。また、結合述部をWHERE節からON節に移動します。

我々はtitleyearの組み合わせは、このような何か、その後、movieの一意の識別子であると仮定した場合:

SELECT a.name 
    FROM actors a 
    JOIN movie m 
    ON m.title = a.title 
    AND m.year = a.year 
GROUP 
    BY a.title 
    , a.year 
    , a.name 
HAVING COUNT(DISTINCT a.character_name) > 1 
1

あなたが選択で持っているすべての列は、ディレクティブでグループの下にも次のようになります。

SELECT A.Name, Count(A.CharacteName) 
FROM Actors A, Movies M 
WHERE A.Title = M.Title AND A.Year = M.Year 
GROUP BY A.Name 
HAVING COUNT(A.CharacteName)) > 1; 
+0

ああ、私は今、それは完璧に動作します助けてくれてありがとう、参照してください! –

+0

喜んで助けてください!それが役に立ちましたら、私の答えを答えとして受け入れてください(答えの下にあるチェックマーク)。 – Radu

+0

このクエリは、結果セットを返すという点で完全に機能しますが、返される結果セットは、*同じ映画*で複数の役割を持つ質問...アクターに指定された仕様を満たしません。 – spencer7593