gpt4 book ai didi

mysql - 将 SQL 结果格式化为总和

转载 作者:行者123 更新时间:2023-11-29 02:30:00 24 4
gpt4 key购买 nike

这是我用来从三个不同“地址”收集每日值的查询,这些“地址”引用我们系统中的不同传感器。

SELECT DISTINCT
LEFT(changes.date_time, 6) AS 'date',
changes.address AS 'address',
(CASE WHEN changes.address IN (18) THEN - MAX(changes.value * types.multiplier) ELSE MAX(changes.value * types.multiplier) END) AS 'value'
FROM sensor.changes
INNER JOIN sensor.types ON changes.type = types.idx
WHERE
changes.address IN (1, 4, 8)
AND changes.date_time >= '12110100000000'
AND changes.date_time <= '13050100000000'
GROUP BY LEFT(changes.date_time, 6),
changes.address
ORDER BY changes.idx;

第一个日期包含以下值,后续日期包含相同的地址:

date   address value
130203 1 0.0160
130203 4 0.1220
130203 8 -0.0070

我想将这三个值(地址 1+4+8)合并到该日期的一行中。我已尝试对“值”列求和,但这会导致 SQL 错误:#1111 - 组函数的使用无效。取出第二个 GROUP BY 列会导致每个日期一个值,但该值不是这些值的总和。使用第二个查询来格式化结果是可以的,但我更愿意在第一个查询中完成数学运算,因为数据库服务器不是本地的。

编辑:澄清我需要的结果:

date   address value
130203 1 0.131

在这种情况下,address 列下的整数无关紧要。

最佳答案

您应该添加一个分组子句。

SELECT Resdate,SUM(Res.address),SUM(Res.value)
FROM
(
SELECT DISTINCT
LEFT(changes.date_time, 6) AS 'date',
changes.address AS 'address',
(CASE WHEN changes.address IN (18) THEN - MAX(changes.value * types.multiplier) ELSE MAX(changes.value * types.multiplier) END) AS 'value'
FROM sensor.changes
INNER JOIN sensor.types ON changes.type = types.idx
WHERE
changes.address IN (1, 4, 8)
AND changes.date_time >= '12110100000000'
AND changes.date_time <= '13050100000000'
GROUP BY LEFT(changes.date_time, 6),
changes.address
ORDER BY changes.idx
) AS Res
GROUP BY Res.Date

关于mysql - 将 SQL 结果格式化为总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14678140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com