我有一个数据集:
+----+---------------+-------+-------------+---------------------+
| 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)
现在,我使用 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)
显然,有两行的 point_count 列具有相同的值,但它只返回了一条记录。我只是想确认这种情况是否正确。提前致谢:)
最佳答案
您只获得一条记录的原因是因为 MIN()
是一个聚合函数,它为每个组返回一条记录。由于您没有指定 GROUP BY
子句,结果是正常的,只给您一条记录。
您可以使用子查询获取point_count
的最小值并将其等同于外部查询的point_count
。
SELECT *
FROM origin_server
WHERE point_count = (SELECT MIN(point_count) FROM origin_server)
输出
╔════╦═══════════════╦═══════╦═════════════╦═════════════════════╗
║ 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 ║
╚════╩═══════════════╩═══════╩═════════════╩═════════════════════╝
关于MySQL MIN() 函数只返回一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15737006/