我有一个查询,它使用聚合函数将值的最大绝对值
分配给表中的另一列。问题是查询完成时间需要花费大量时间(大约加起来 10-15 秒)。查询如下所示:
UPDATE calculated_table c
SET tp = (SELECT MAX(ABS(s.tp))
FROM ts s INNER JOIN tc t ON s.id = t.id
GROUP BY s.id);
其中 id
不唯一,因此分组。 tp
是一个数字整数字段。这些表格如下所示:
TABLE ts
PID(primary) | id (FKEY) | tp (integer)
--------------------+-----------------------------+------------------------------------------------------
1 | 2 | -100
2 | 2 | -500
3 | 2 | -1000
TABLE tc
PID(primary) | id (FKEY)
--------------------+-----------------------------+-------------------------
1 | 2
我希望输出如下:
TABLE c
PID(primary) | tp (integer)
--------------------+-----------------------------+--------
1 | 1000
我试图让它像这样工作:
UPDATE calculated_table c
SET tp = (SELECT s.tp
FROM ts s INNER JOIN tc t ON s.id = t.id
ORDER BY s.tp DESC
LIMIT 1);
虽然它提高了性能,但结果不正确..任何帮助将不胜感激?
最佳答案
我确实设法修改了查询,结果发现嵌套聚合函数并不是一个好的选择。但是,如果它对任何人有帮助,这就是我最终所做的:
UPDATE calculated_table c
SET tp = (SELECT ABS(s.trade_position)
FROM ts s INNER JOIN tc t ON s.id = t.id
WHERE c.id = s.id
ORDER BY ABS(s.tp) DESC
LIMIT 1);
关于sql - 聚合到 'plain'查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38083425/