奇怪的mysql查询返回值

奇怪的mysql查询返回值,mysql,Mysql,我试图对tables列中满足某些条件的值求和,但无法计算mysql返回的值 我已经运行了下面的脚本 create table robot_data(name varchar(20), value float, x int, y int, z int); insert into robot_data(name, value, x, y, z) values("temperature", 27.99, 1, 88, 0); insert into robot_data(name, value,

我试图对tables列中满足某些条件的值求和,但无法计算mysql返回的值

我已经运行了下面的脚本

create table robot_data(name varchar(20), value float, x int, y int, z int);


insert into robot_data(name, value, x, y, z) values("temperature", 27.99, 1, 88, 0);
insert into robot_data(name, value, x, y, z) values("temperature", 27.99, 1, 88, 0);
insert into robot_data(name, value, x, y, z) values("temperature", 27.99, 1, 88, 0);
insert into robot_data(name, value, x, y, z) values("temperature", 27.99, 1, 88, 0);

insert into robot_data(name, value, x, y, z) values("humidity", 7.99, 1, 88, 0);
insert into robot_data(name, value, x, y, z) values("humidity", 7.99, 1, 88, 0);
insert into robot_data(name, value, x, y, z) values("humidity", 7.99, 1, 88, 0);
insert into robot_data(name, value, x, y, z) values("humidity", 7.99, 1, 88, 0);
insert into robot_data(name, value, x, y, z) values("humidity", 7.99, 1, 88, 0);
insert into robot_data(name, value, x, y, z) values("humidity", 7.99, 1, 88, 0);




SELECT  COUNT(temp.value) FROM 

(SELECT value, name from robot_data where name ='temperature') as temp,
(SELECT value, name from robot_data where name ='humidity') as hum;

SELECT COUNT(value) FROM robot_data;

我希望第一个和第二个select返回相同的结果,但它们没有。第一个返回24,第二个返回10,这是正确的

实际上,我想做的是在第一个选择中:

SELECT ROUND(SUM(temp.value + hum.value))...

但我不希望任何匹配行返回null,因为温度值为4,湿度值为6。如果我能深入了解正在发生的事情,我将不胜感激。

第二次返回10,因为您在表robot_数据中插入了10行

第一次返回24,因为您的sintax

FROM ( ) temp, ( ) hum 

在子查询返回的表(温度为4行)和sunquery返回的表(湿度为6行)之间生成交叉联接,因此6x4=24行,第二次返回10行,因为在表数据中插入了10行

第一次返回24,因为您的sintax

FROM ( ) temp, ( ) hum 

在子查询返回的表(温度为4行)和sunquery返回的表(湿度为6行)之间生成交叉联接,因此6x4=24行

您的预期结果是什么?我有两个预期,第一个预期在问题中,但下面的回答澄清了这本质上是一个表联接,我不知道。第二个是在温度和湿度中求和匹配行,对于没有匹配值的行为null,因此我将有6行,前四行求和温度和湿度,最后一行为null。您期望的结果是什么?我有两个期望值,第一个在问题中,但下面的答案澄清了它本质上是一个表加入这个我不知道。第二个是对温度和湿度中的匹配行求和,对于没有匹配值的行为null,因此我将有6行,前四行求和温度和湿度,最后一行为null。Ok。这是很有见地的,我通过使用left joins.Ok解决了我的问题。这很有见地,我通过使用左连接解决了我的问题。