Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rmysql查询没有返回正确的值?_Mysql_Sql_R_Rmysql - Fatal编程技术网

Rmysql查询没有返回正确的值?

Rmysql查询没有返回正确的值?,mysql,sql,r,rmysql,Mysql,Sql,R,Rmysql,我在r中有一个查询,使用rmysql包: sql.query = paste0("SELECT * FROM performance_db.pcTab WHERE fk_ID_calc = (SELECT ID_calc FROM performance_db.calculationTab WHERE turbine_model = '",input$t1,"' AND

我在r中有一个查询,使用rmysql包:

sql.query = paste0("SELECT * FROM performance_db.pcTab WHERE 
                       fk_ID_calc = (SELECT ID_calc FROM performance_db.calculationTab WHERE
                       turbine_model = '",input$t1,"' AND 
                       op_mode = '",input$t2,"' AND 
                       date_entered ='",input$t3,"')
                       AND sensor = 'P_el'"
  )
    spc = fetch(dbSendQuery(conn, sql.query), n = -1)
这将返回一个表:

head(spc)
  ID_pc voltage_side sensor Air_density v2.5 v3  v4  v5  v6   v7   v8   v9  v10  v11  v12  v13  v14  v15  v16  v17  v18  v19
1     1            0   P_el       1.225    0 44 184 404 721 1165 1686 2107 2272 2300 2300 2300 2300 2300 2300 2300 2300 2300
2     2            0   P_el       1.000   NA 33 155 346 622 1010 1486 1967 2224 2286 2294 2300 2300 2300 2300 2300 2300 2300
3     3            0   P_el       1.030   NA 35 161 358 642 1041 1529 1999 2235 2291 2297 2300 2300 2300 2300 2300 2300 2300
4     4            0   P_el       1.060   NA 37 167 369 661 1072 1571 2036 2249 2295 2300 2300 2300 2300 2300 2300 2300 2300
5     5            0   P_el       1.090   NA 39 173 381 681 1103 1612 2060 2256 2300 2300 2300 2300 2300 2300 2300 2300 2300
6     6            0   P_el       1.120   NA 42 178 392 701 1134 1649 2080 2263 2300 2300 2300 2300 2300 2300 2300 2300 2300
我想在空气密度上增加额外的过滤器,如:

sql.query = paste0("SELECT * FROM performance_db.pcTab WHERE 
                       fk_ID_calc = (SELECT ID_calc FROM performance_db.calculationTab WHERE
                       turbine_model = '",input$t1,"' AND 
                       op_mode = '",input$t2,"' AND 
                       date_entered ='",input$t3,"')
                       AND sensor = 'P_el' AND Air_density = 1"
  )
这只是一行包含空气密度=1的信息:

ID_pc voltage_side sensor Air_density v2.5 v3  v4  v5  v6   v7   v8   v9  v10  v11  v12  v13  v14  v15  v16  v17  v18  v19
1     2            0   P_el           1   NA 33 155 346 622 1010 1486 1967 2224 2286 2294 2300 2300 2300 2300 2300 2300 2300
但当我试图过滤其他空气密度的基础上,它不会返回任何东西。就像在上面提到的查询中,我把空气密度设为1.225:

head(spc)
 [1] ID_pc        voltage_side sensor       Air_density  v2.5         v3           v4           v5           v6          
[10] v7           v8           v9           v10          v11          v12          v13          v14          v15         
[19] v16          v17          v18          v19

我不知道为什么会这样

FLOAT
DOUBLE
数据类型不精确

如果保存值
1.225
,则可以将其保存为
1.22500001
。 当您尝试查询值为
1.225
的所有数据时,它将找不到它,因为它保存为
1.22500001

您最好使用数据类型
DECIMAL
NUMERIC
或者尝试将
FLOAT
值转换为
DECIMAL
,如下所示:

CAST(Air_density as DECIMAL(10,3))
这是来自MySQL的文档:

11.2.3浮点类型(近似值)-浮点、双精度

FLOAT和DOUBLE类型表示近似的数字数据值。 MySQL使用四个字节表示单精度值,使用八个字节表示单精度值 双精度值

对于FLOAT,SQL标准允许一个可选的 精度(但不是指数的范围),单位为 括号中的关键字FLOAT。MySQL还支持这个可选的 精度规格,但精度值仅用于 确定存储大小。0到23之间的精度将产生4字节 单精度浮点列。精度从24到53的结果是 8字节双精度双列

MySQL允许非标准语法:FLOAT(M,D)或REAL(M,D)或DOUBLE 精度(M,D)。这里,(M,D)表示可以存储的值最多为 共M位,其中D位可能在小数点后。 例如,定义为FLOAT(7,4)的列看起来像-999.9999 当显示时。MySQL在存储值时执行舍入,因此如果 在FLOAT(7,4)列中插入999.00009,近似结果为 999.0001

因为浮点值是近似值,而不是存储为精确值 如果在比较中试图将其视为精确值,则可能导致 问题。它们也受平台或实施的影响 依赖关系。有关更多信息,请参见第B.5.4.8节“问题 “使用浮点值”

为了实现最大的可移植性,需要存储近似数字的代码 数据值应使用浮点或双精度,无规范 指精度或位数

此链接也应该对您有所帮助:


为什么要将(明显的)小数与字符串值进行比较?是的,你应该像霍尼獾说的那样写“AND Air_density=1.225”。@霍尼獾,如果我喜欢,它不会改变任何东西:
AND Air_density=1.225
,它返回的值与
Air_density
类型的
float
?@dns_nx,是的。