[英]SQL GROUP BY and HAVING issue
我正在學習一些sql,我正在做一些練習以便更好地學習,而我在使用GROUP BY功能時遇到了麻煩。 所以我有一些基本的演員表(標題,年份,角色名稱,姓名)和電影(標題,年份)。 我的任務是列出在同一部電影中播放多個角色的演員姓名。 這是我試過的代碼:
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;
但是我收到此錯誤:
錯誤1055(42000):SELECT列表的表達式#2不在GROUP BY子句中,並且包含非聚合列'new.A.Name',它在功能上不依賴於GROUP BY子句中的列; 這與sql_mode = only_full_group_by不兼容。
如果movie
由title
和year
唯一標識,並且“演員”通過name
標識......我們不一定需要加入movie
表。
我們可以使用多個character_name
識別出現在同一影片中的演員,並使用如下查詢:
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列表中刪除我們不需要的表達式。 如果只需要演員的名字
SELECT a.name
FROM actors a
GROUP
BY a.title
, a.year
, a.name
HAVING COUNT(DISTINCT a.character_name) > 1
請注意,這有可能多次返回相同的actor名稱。
例如,“邁克邁爾斯”在“奧斯汀權力”系列的多部電影中出現多個角色。 第一個查詢將列出電影和actor。 此查詢只是從SELECT列表中刪除了電影信息,但仍然會多次離開“Mike Myers”,每個電影一次。
如果刪除重復項是規范的一部分,則可以調整查詢。
如果我們需要連接到movie
表,我建議放棄連接操作的舊學校逗號語法,而是使用JOIN關鍵字。 並且還將連接謂詞從WHERE
子句移動到ON
子句。
如果我們假設title
和year
的組合是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
您選擇的所有列也應該在group by指令下:
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.