sql - 聚合到 'plain'查询

标签 sql database postgresql query-optimization

我有一个查询,它使用聚合函数将值的最大绝对值分配给表中的另一列。问题是查询完成时间需要花费大量时间(大约加起来 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/

相关文章:

sql - 如何实现以下查询

sql - 删除同一个表上从 select 查询中选择的记录

SQL Server 2014 跨多个数据库触发

mysql - MongoDB 作为主要数据存储,MySQL 仅用于事务

ruby-on-rails - 仅查找所有 has_many 集合都具有特定列值的对象

postgresql - 更新并返回GORM

java - 如何使用jdbc在swing中用另一个字段替换外键?

mysql - mysql中与where条件一起使用优化group by

sql-server - sql cross join - 有人发现它有什么用?

sql - 慢速 SQL 事务从 Postgres 中的表中获取最新的时间戳行