gpt4 book ai didi

mysql - mysql统计重复数据的方法

转载 作者:行者123 更新时间:2023-11-28 23:51:08 24 4
gpt4 key购买 nike

id  | category
001 | 1000
001 | 300
002 | 500
003 | 200;300;100
004 | 100;300
005 | 200;3000

结果应该是

Category | Total
1000 | 1
300 | 3
500 | 1
200 | 2
100 | 2

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

如有任何帮助,我们将不胜感激!

PS:我知道解决这个问题的方法是规范化,但我想这是一项艰巨的工作,而且我无权更改数据库结构。所以我想如果有一个解决方案可以使查询工作,那就太好了! :)

谢谢!

最佳答案

好的。我对以前的回答很满意!下面是一种在不使用存储过程的情况下在 MySQL 中通过分隔符拆分字符串的方法。

要使用该方法,您首先需要有另一个表格,其中包含从 1 到每行可以存储的任意数量的数字。该表将用于联接,以便第一个选择将联接到编号为 1 的行,第二个选择将联接到行 2,等等。因此您需要一个这样的表:ID1个2个3个4个5个...

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

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

    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代码:

    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;

我得到了这个结果:

    category    numtimes
100 2
1000 1
200 3
200 2
300 1
500 1

关于mysql - mysql统计重复数据的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32559170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com