簡體   English   中英

SQL GROUP BY和HAVING問題

[英]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不兼容。

如果movietitleyear唯一標識,並且“演員”通過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子句。

如果我們假設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

您選擇的所有列也應該在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM