我有 2 个表,我需要计算任何角色在每部电影中出现的次数
表格示例:
电影表
TITLE MOVIEID OTHER STUFF....
------------- -------
MOVIE TITLE 1 ID# 1
MOVIE TITLE 2 ID# 2
MOVIE TITLE 3 ID# 3
ETC...
角色表
ROLEID MOVIEID OTHER STUFF....
------- -------
ROLE #1 ID# 1
ROLE #2 ID# 1
ROLE #3 ID# 2
ROLE #4 ID# 2
ROLE #5 ID# 3
ROLE #6 ID# 4
ROLE #7 ID# 5
ROLE #8 ID# 3
ETC....
我想得到如下所示的输出:
TITLE NUMROLES
------------- --------------------------------------
MOVIE TITLE 1 COUNT (ROLE.MOVIEID) FOR MOVIE TITLE 1
MOVIE TITLE 2 COUNT (ROLE.MOVIEID) FOR MOVIE TITLE 2
MOVIE TITLE 3 COUNT (ROLE.MOVIEID) FOR MOVIE TITLE 3
MOVIE TITLE 4 COUNT (ROLE.MOVIEID) FOR MOVIE TITLE 4
MOVIE TITLE 5 COUNT (ROLE.MOVIEID) FOR MOVIE TITLE 5
ETC...
我尝试了几种不同的方法,但我似乎总能得到所有角色的总数,而不是单独计算。
我的“最佳”输出示例:
mysql> SELECT TITLE, COUNT(ROLE.MOVIEID) AS NUMROLES
-> FROM MOVIE, ROLE
-> GROUP BY TITLE;
+-----------------------------+----------+
| TITLE | NUMROLES |
+-----------------------------+----------+
| Amadeus | 138 |
| Apollo 13 | 138 |
| Batman | 138 |
| Batman & Robin | 138 |
| Batman Begins | 138 |
| Batman Forever | 138 |
| Batman Returns | 138 |
| Casablanca | 138 |
| Dirty Harry | 138 |
| Few Good Men, A | 138 |
| Field of Dreams | 138 |
| Fly, The | 138 |
| Forrest Gump | 138 |
| Godfather, The | 138 |
| Gone with the Wind | 138 |
| Jerry Maguire | 138 |
| Mrs. Doubtfire | 138 |
| Naked City, The | 138 |
| Sixth Sense, The | 138 |
| Sudden Impact | 138 |
| Terminator 2: Judgment Day | 138 |
| Terminator, The | 138 |
| Tootsie | 138 |
| Wizard of Oz, The | 138 |
+-----------------------------+----------+
24 rows in set (0.02 sec)
我想我对在这种情况下应该使用什么没有正确的了解,任何人都可以在不给我答案的情况下指出正确的方向吗?
奖励:
我还需要过滤掉任何没有至少 6 的标题(ROLE.MOVIEID) - 我想我需要为此使用 HAVING。
最佳答案
你真的很接近,只需要调整你的JOIN
(它缺少一个谓词),并添加你的HAVING
作为你的奖励:
SELECT TITLE, COUNT(*) AS NUMROLES
FROM MOVIE M
JOIN ROLE R ON M.MOVIEID = R.MOVIEID --This is the join predicate (condition)
GROUP BY TITLE
HAVING COUNT(*) > 5;
这是显式的 JOIN
语法。最好的做法是将其用作隐式变体(即 FROM
子句中的逗号)早已贬值且无论如何都更难使用。
请注意,您可以根据需要使用 COUNT(r.movieID)
,但 COUNT(*)
将以相同的方式计算行数。
关于mysql - 计算同一列中的多个项目从 2 个表中提取数据 - mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47682881/