我是一个总的mySQL新手,但我不知道如何寻找答案,所以这就是我把它带到这里的原因:
DESCRIBE rParam;
+----------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------------+------+-----+---------+-------+
| p | float | YES | | NULL | |
| d | float | YES | | NULL | |
| LTP | float | YES | | NULL | |
| LTD | float | YES | | NULL | |
| alpha | float | YES | | NULL | |
| N | smallint(6) | YES | | NULL | |
| g | float | YES | | NULL | |
| a | float | YES | | NULL | |
| seed | float | YES | | NULL | |
| startingWeight | float | YES | | NULL | |
| path | varchar(1000) | YES | UNI | NULL | |
| type | varchar(100) | YES | | NULL | |
+----------------+---------------+------+-----+---------+-------+
12 rows in set (0.00 sec)
SELECT p FROM rParam GROUP BY p;
+--------+
| p |
+--------+
| 0 |
| 0.001 |
| 0.002 |
| 0.003 |
| 0.004 |
| 0.005 |
| 0.0075 |
| 0.008 |
| 0.01 |
| 0.012 |
| 0.0125 |
| 0.014 |
| 0.015 |
| 0.02 |
| 0.025 |
| 0.03 |
| 0.035 |
| 0.04 |
| 0.05 |
| 0.1 |
| 0.2 |
| 0.3 |
| 0.4 |
| 0.5 |
| 0.6 |
| 0.7 |
+--------+
26 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
我可以获得一种查询的结果:
SELECT p FROM rParam WHERE p=0.5 GROUP BY p;
+------+
| p |
+------+
| 0.5 |
+------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
但是,改变我要求的p值:
SELECT p FROM rParam WHERE p=0.6 GROUP BY p;
Empty set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
但我们可以从第一个输出中清楚地看到有哪些行p = 0.6?这是大多数p值的问题 - 为什么mySQL返回空集?
这听起来像一个舍入错误.浮点数不能总是以二进制形式精确表示.尝试应用一些epsilon:
SELECT DISTINCT p
FROM rParam
WHERE ABS(p - 0.6) < 0.00001
Run Code Online (Sandbox Code Playgroud)
如果您需要精确的小数,请使用DECIMAL而不是FLOAT列数据类型.
PS.可能更好地使用SELECT DISTINCT而不是GROUP BY.
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |