分类: 技术

MySQL GROUP BY 两个或多个条件

主要是帮同学解决的一个问题,用到 SQL 中的 GROUP BY。

问题:一个表(AttackIP)有两个字段,端口号(Port)和访问时间(Atime),求出同一分钟内每个 IP 出现的次数。

解决思路

考虑到逻辑的清晰,先创建一个视图 AttackLog。视图将每条记录中的时间字段转换为时间戳,并且修改为该时间所属分钟的初始时刻(Atime)。如此,问题转换为查找相同 Atime 分组内具有相同 Port 字段的记录数量。

SQL 语句如下:

测试数据

AttackIP 表

Port Atime
22 2013-03-03 03:05:06
22 2013-03-03 03:05:50
22 2013-03-03 03:05:45
42 2013-03-03 03:05:45
42 2013-03-03 03:04:45
22 2013-03-03 03:06:45
42 2013-03-03 03:04:02

查询结果

Port Times Atime
42 2 2013-03-03 03:04:00
22 3 2013-03-03 03:05:00
42 1 2013-03-03 03:05:00
22 1 2013-03-03 03:06:00

视图可以由子查询代替,不再赘述。

注:转载注明出处并联系作者,本文链接:https://nodefe.com/mysql-group-by-two-or-more/

发表评论

评论