MySQL MIN()函数只返回一条记录

Hun*_*hao 2 mysql sql select min

我有一个数据集:

+----+---------------+-------+-------------+---------------------+
| id | ip            | port  | point_count | create_time         |
+----+---------------+-------+-------------+---------------------+
|  1 | 192.168.20.28 | 10000 |           0 | 2013-03-29 14:29:14 |
|  2 | 0.0.0.0       | 10000 |           0 | 2013-03-29 14:29:32 |
|  3 | 0.0.0.1       | 11111 |           2 | 2013-03-29 14:29:38 |
|  4 | 0.0.0.5       | 11112 |           3 | 2013-03-29 14:29:44 |
+----+---------------+-------+-------------+---------------------+
4 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

现在,我使用mysql的MIN()函数来获取记录:

mysql> SELECT s.id, s.ip, s.port, MIN(s.point_count) FROM origin_server s;
+----+---------------+-------+--------------------+
| id | ip            | port  | MIN(s.point_count) |
+----+---------------+-------+--------------------+
|  1 | 192.168.20.28 | 10000 |                  0 |
+----+---------------+-------+--------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

显然,有两行具有相同的列point_count值,但它只返回一条记录.我只是想确认这种情况是否正确.提前致谢 :)

Joh*_*Woo 5

您只获得一条记录的原因MIN()是因为是一个聚合函数,它为每个组返回一条记录.由于您尚未指定GROUP BY子句,因此结果是正常的,只给出一条记录.

您可以使用子查询来获取最小值,point_count并将其等同于外部查询 point_count.

SELECT  *
FROM    origin_server 
WHERE   point_count = (SELECT MIN(point_count) FROM origin_server)
Run Code Online (Sandbox Code Playgroud)

OUTPUT

??????????????????????????????????????????????????????????????????
? ID ?      IP       ? PORT  ? POINT_COUNT ?     CREATE_TIME     ?
??????????????????????????????????????????????????????????????????
?  1 ? 192.168.20.28 ? 10000 ?           0 ? 2013-03-29 14:29:14 ?
?  2 ? 0.0.0.0       ? 10000 ?           0 ? 2013-03-29 14:29:32 ?
??????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)