gpt4 book ai didi

mysql - 计算同一列中的多个项目从 2 个表中提取数据 - mysql

转载 作者:可可西里 更新时间:2023-11-01 08:24:19 25 4
gpt4 key购买 nike

我有 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.movi​​eID),但 COUNT(*) 将以相同的方式计算行数。

关于mysql - 计算同一列中的多个项目从 2 个表中提取数据 - mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47682881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com