问题描述
我的天气计划有两个不同的表,降雨量和外部温度。
我试试这个:
SELECT
savetime,UNIX_TIMESTAMP(savetime) as unixt,(MAX(counteramount) - MIN(counteramount))*295/1000 as rainc
from rainfall
union
Select
savetime,avg(weatherdata)as temp
FROM outside_temp
where savetime >= DATE_SUB(CURDATE(),INTERVAL 90 DAY)
group by day(savetime)
但返回失败: #1222-使用的SELECT命令返回不同数量的字段
我没有计划如何解决此问题...
最好的问候 基多
解决方法
UNION的列数必须相同,因此在unixtome列中添加simpo就可以了
querydsl-mongodb
SELECT savetime,UNIX_TIMESTAMP(savetime) AS unixt,(MAX(counteramount) - MIN(counteramount)) * 295 / 1000 AS rainc,'' FROM rainfall UNION SELECT savetime,'' AVG(weatherdata) AS temp FROM outside_temp WHERE savetime >= DATE_SUB(CURDATE(),INTERVAL 90 DAY) GROUP BY DAY(savetime)
CREATE TABLE outside_temp ( `savetime` DATETIME,`weatherdata` FLOAT,`newflag` INTEGER ); INSERT INTO outside_temp (`savetime`,`weatherdata`,`newflag`) VALUES ('2020-01-31 01:10:00','8.9','1'),('2020-01-31 03:25:00',('2020-01-31 05:40:00','9.1',('2020-01-31 00:10:00','8.8',('2020-01-31 04:25:00','9.3',('2020-01-31 00:55:00','9',('2020-01-31 01:25:00',('2020-01-31 00:25:00',('2020-01-31 04:10:00','1');
CREATE TABLE rainfall ( `savetime` VARCHAR(34),`raincounter` INTEGER,`counteramount` INTEGER,`israining` INTEGER,`newflag` INTEGER ); INSERT INTO rainfall (`savetime`,`raincounter`,`counteramount`,`israining`,`newflag`) VALUES ('2020-01-31 09:10:00','2016','37290','0',('2020-01-31 16:56:00',('2020-01-31 07:40:00',('2020-01-31 05:10:00',('2020-01-31 11:11:00',('2020-01-31 15:11:00',('2020-01-31 20:56:00',('2020-01-31 11:41:00',('2020-01-31 08:55:00',('2020-01-31 15:41:00',('2020-01-31 12:11:00','1');
savetime_temp | AVG_temp | rainc :------------------ | ----------------: | -----: 2020-01-31 00:10:00 | 9.011111047532824 | 0.0000
db 提琴here
,您需要相同数量的列和匹配的数据类型..如果没有足够的列,则添加空列
SELECT
day(savetime),UNIX_TIMESTAMP(savetime) as unixt,(MAX(counteramount) - MIN(counteramount))*295/1000 as rainc,null temp
from rainfall
group by day(savetime)
union
Select
day(savetime),null,avg(weatherdata)
FROM outside_temp
where savetime >= DATE_SUB(CURDATE(),INTERVAL 90 DAY)
group by day(savetime)