2016-09-08 5 views
1

私はCSVファイルを受け取りました。その1つの列には、Jack、Clark、Jamesのような名前が1つのセルにあります。もう一つはJamesを、もう一つはJames、Clarkと一緒にいます。それらにすべての行を与えずにGROUP BYCOUNT(*)の方法がありますか?一瞬のために言う古い格言を無視名前でカンマで区切られたMySQLグループ

enter image description here

+0

あなたはmysqlテーブルまたはcsvファイルについて話していますか?セル内のデータは原子的でなければならないため、セル内の2つ以上の名前は3つの正規形ではありません。 – user6622043

答えて

0

「あなたはが何かを行うことができますという理由だけで、それが意味するものではありませんあなたべき」、とでPRIMARY KEYの存在に注目し、私のデータセットはあなたのものではありません。

SELECT * FROM ints; 
+---+ 
| i | 
+---+ 
| 0 | 
| 1 | 
| 2 | 
| 3 | 
| 4 | 
| 5 | 
| 6 | 
| 7 | 
| 8 | 
| 9 | 
+---+ 

SELECT * FROM my_table; 
+----+--------------------+ 
| id | names    | 
+----+--------------------+ 
| 1 | steve,james,carlos | 
| 2 | james    | 
| 3 | carlos,steve  | 
| 4 | james,jack   | 
+----+--------------------+ 

SELECT name 
    , COUNT(*) total 
    FROM 
    (SELECT DISTINCT id 
        , SUBSTRING_INDEX(SUBSTRING_INDEX(names,',',i),',',-1) name 
        FROM my_table x 
        , ints 
    ) a 
GROUP 
    BY name; 
+--------+-------+ 
| name | total | 
+--------+-------+ 
|  |  4 | 
| carlos |  2 | 
| jack |  1 | 
| james |  3 | 
| steve |  2 | 
+--------+-------+ 
関連する問題