MySQL Query:在一个非常庞大的表中计算重复值

前端之家收集整理的这篇文章主要介绍了MySQL Query:在一个非常庞大的表中计算重复值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有这个MySQL表:

CREATE TABLE `triple` (
  `id_one` int(11) NOT NULL,`id_two` int(11) NOT NULL,`id_three` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

它共有近1000万行.中间列中的ID(“id_two”)可以在不同的行中出现不同的时间.

简短示例:

id_one    id_two    id_three
1         2         3
2         2         3
3         2         1
68        98        1
1         4         3
2         4         4
4         5         33
6         5         3
90        5         3
34        5         83
9         3         98

现在我想计算不同的id(“id_two”),就是在这个例子中:

id_two     count
2     ->  3
98    ->  1
4     ->  2
5     ->  4
3     ->  1

如何有效地实现这一目标? (这是一次性工作……)这是第一件事.我需要做的第二件事是:要像上面一样计算,然后只选择那些有更多数量的ID,那么就说100.

非常感谢您的帮助!

亲切的问候
Aufwind

最佳答案
完成此任务的基本命令是这样的:

SELECT id_two,count(*) FROM triple GROUP BY id_two;

如果你想……你可以将它存储在临时表中

CREATE TEMPORARY TABLE xxx SELECT id_two,count(*) AS c FROM …
SELECT * FROM xxx WHERE c > 100;

…或在外部查询中使用结果…

SELECT * FROM (SELECT id_two,count(*) AS c FROM triple GROUP BY id_two) t WHERE c > 100;

…或使用HAVING条款(如Marc在评论中所建议的):

SELECT id_two,count(*) AS c FROM triple GROUP BY id_two HAVING c > 100;

猜你在找的MySQL相关文章