从mysql中分隔的逗号中选择重复记录和计数记录

时间:2014-07-05 10:13:53

标签: mysql

我需要一个查询来选择重复记录并计算总重复记录

Posted Records


PostID | Location

  1    | Delhi,Mumbai,Patna
  2    | Mumbai,Noida
  3    | Delhi
  4    | Mumbai,Noida

我想要这个结果

  Location  | Total
  Delhi     | 2
  Mumbai    | 3
  Patna     | 1
  Noida     | 2

1 个答案:

答案 0 :(得分:2)

首先,您应该规范化您的结构,摆脱逗号分隔值,并使用另一个表格将您的位置与您的帖子表格相关联,请参阅Database normalization,对于您当前的结构,您可以做的是获取您的所有位置表并将它们插入到新表中,然后在新表上使用聚合函数

CREATE TABLE locaions (cities CHAR(255)) ;

SET @S1 = CONCAT(
  "INSERT INTO locaions (cities) VALUES ('",
  REPLACE(
    (SELECT 
      GROUP_CONCAT(`Location`) AS DATA 
    FROM
      `posts`),
    ",",
    "'),('"
  ),
  "');"
) ;

PREPARE stmt1 FROM @s1 ;

EXECUTE stmt1 ;

这将在位置表中插入包含重复数据的所有位置,然后使用以下查询来获得所需的计数

SELECT cities,count(*) 
FROM locaions 
group by cities

Demo