Maison  >  Questions et réponses  >  le corps du texte

Méthode pour compter les noms en double dans la colonne Varchar/Text dans MySQL/Any SQL

Alors voici la situation : j'ai un fichier CSV qui ressemble à ceci :

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

Ce que je dois faire est d'ouvrir ce fichier CSV dans une fonction Python et d'effectuer quelques traitements sur les espaces, etc.

Je dois ensuite le télécharger dans une base de données SQL (tout ce que je veux, mais j'ai choisi MySQL), ce qui ne pose aucun problème.

Question

Mon principal problème est que je dois ensuite (comme mon défi l'exige) créer une requête qui compte le nombre de fois qu'un acteur apparaît dans tous les films d'une liste. Donc, dans ce cas, la requête devrait ressembler à ceci :

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

Comme vous pouvez le voir, je n'ai pas de nom que je puisse rechercher avec LIKE ou CONTAINS. Donc qu'est ce que je devrais faire? Parce que dans le CSV, la liste des acteurs de chaque film comporte plus d'un acteur et que je les enregistre dans un type varchar ou texte dans la base de données, j'ai plusieurs acteurs par ligne.

Ou dois-je créer une autre table avec des clés étrangères pour relier les acteurs et les films ? Ou n'est-il pas possible de le faire dans MySQL, mais peut-être possible dans d'autres SQL ?

P粉464113078P粉464113078405 Il y a quelques jours541

répondre à tous(1)je répondrai

  • P粉080643975

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

    Si vous recherchez quelque chose d'efficace en termes de performances, vous devez diviser les données (créer 3 tables au total - Films, Acteurs, Crédits) et utiliser Cast et Crédits pour connecter les acteurs aux films, puis écrire du SQL simple avec la jointure, comme ci-dessous :

    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;
    

    Vous pouvez également le faire d'une autre manière en utilisant https://sebhastian.com/mysql-split-string/ou en utilisant psql/plsql et des procédures stockées. Je diviserais simplement les données si possible.

    Bravo.

    répondre
    0
  • Annulerrépondre