首页  >  问答  >  正文

计算Varchar/Text列中重复姓名的方法在MySQL/任何SQL中

所以,这是情况:我有一个看起来像这样的CSV文件:

show_id   title      cast
1         Batman     Robert Pattinson, Collin Farrel, Zoë Kravitz
2         Twilight   Robert Pattinson, Kristen Stewart
3         Ava        Jessica Chastain, Collin Farrel

我需要做的是在Python函数中打开这个CSV文件,对空格等进行一些处理。

然后我需要将其上传到SQL数据库中(任何我想要的,但我选择了MySQL),这没有问题。

问题

我的主要问题是,然后我需要(因为我的挑战要求如此)创建一个查询来计算演员在列表中的所有电影中出现的次数。所以,在这种情况下,查询应该显示如下:

演员               电影数量
Robert Pattinson    2
Collin Farrel       2
Zoë Kravitz         1
Kristen Stewart     1
Jessica Chastain    1

如您所见,我没有一个可以用LIKE或CONTAINS进行搜索的名称。那么,我该怎么办呢?因为在CSV中,每部电影的演员列表有超过一个演员,并且我将它们保存在数据库中的varchar或text类型中,所以每行都有多个演员。

或者我应该创建另一个表格,用演员和电影的外键来关联吗?或者在MySQL中无法做到这一点,但在其他SQL中可能可以做到吗?

P粉464113078P粉464113078405 天前540

全部回复(1)我来回复

  • P粉080643975

    P粉0806439752023-09-11 16:09:29

    如果您正在寻找性能高效的东西,您应该将数据分割(总共创建3个表 - 电影,演员,演职员),并使用演职员将演员与电影连接起来,然后编写一些带有连接的简单SQL,如下所示:

    Select actors.name as Actor, count(movies.title) as Amount_of_movies from actors,
    inner join cast on cast.actor_id = actors.actor_id
    inner join movies on movies.movie_id = cast.movie_id;
    

    您还可以使用https://sebhastian.com/mysql-split-string/或使用psql / plsql和存储过程来完成另一种方式。如果可能的话,我会只是将数据分割。

    干杯。

    回复
    0
  • 取消回复