首頁  >  問答  >  主體

計算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 天前538

全部回覆(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
  • 取消回覆