β

MySQL GROUP BY 两个或多个条件

白糖 462 阅读

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

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

解决思路

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

SQL 语句如下:

mysql>CREATE VIEW AttackLog AS SELECT Port, UNIX_TIMESTAMP(Atime) DIV 60 * 60 AS Atime FROM AttackIP;

mysql>SELECT Port, count(Port) AS Times, FROM_UNIXTIME(Atime) AS Atime FROM AttackLog GROUP BY Atime, Port;

测试数据

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

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

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

作者:白糖
口淡
原文地址:MySQL GROUP BY 两个或多个条件, 感谢原作者分享。