我有这个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;