首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何统计mysql中的重复数据

如何统计mysql中的重复数据
EN

Stack Overflow用户
提问于 2015-09-14 15:20:13
回答 1查看 68关注 0票数 1
代码语言:javascript
运行
复制
id  | category
001 | 1000
001 | 300
002 | 500
003 | 200;300;100
004 | 100;300
005 | 200;3000

结果应该是

代码语言:javascript
运行
复制
Category | Total
1000     | 1
300      | 3
500      | 1
200      | 2
100      | 2

我如何才能得出这样的结果呢?我看到了一些我需要使用find_in_set的东西,但它对我来说有点复杂。

在这方面的任何帮助都将非常感谢!

PS:我知道这个问题的解决方案是标准化,但我想这是一项很大的工作,而且我没有权限更改数据库结构。所以我想,如果有一个解决方案可以让查询工作起来,那就太好了!:)

谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2015-09-14 15:54:27

好的。我对上一个答案的回答!下面是一种在MySQL中使用分隔符拆分字符串的方法,而无需使用存储过程。

要使用该方法,首先需要有另一个表,该表具有从1到每行可以存储的任意多个选项的数字。这个表将用在连接中,这样第一个选择将连接到编号为1的行,第二个选择连接到第二行,依此类推。因此,您需要一个这样的表: id 1 2 3 4 5 ...

假设您的主表称为具有类别列的maintable,而另一个表名为具有id列的其他表(尽管您可以使用任何具有序列号或id号的表)。

这是我用来创建这个示例的表:

代码语言:javascript
运行
复制
    CREATE TABLE maintable (id INT, category VARCHAR(255));
    INSERT INTO maintable VALUES (1, '1000'), (2, '300'), (3, '500'), 4, '200;300;100'), (4, '100;300'), (4, '200;3000');
    CREATE TABLE othertable (id INT);
    INSERT INTO othertable VALUES (1), (2), (3), (4), (5), (6), (7), (8);

这是mysql代码:

代码语言:javascript
运行
复制
    SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(maintable.category,';',othertable.id),';',-1) AS category,
COUNT(*) AS numtimes
    FROM maintable INNER JOIN othertable ON
(LENGTH(category)>0 AND SUBSTRING_INDEX(SUBSTRING_INDEX(category,';',othertable.id),';',-1)
<> SUBSTRING_INDEX(SUBSTRING_INDEX(category,';',othertable.id-1),';', -1))
    GROUP BY category ORDER BY category;

我得到了这样的结果:

代码语言:javascript
运行
复制
    category    numtimes
    100     2
    1000    1
    200     3
    200     2
    300     1
    500     1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32559170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档