java - 我的查询需要很长时间才能完成查找列值差异为另一列最大组的行对
问题描述
说,我有一张这样的桌子:
我想找到每个会话的性能差异最大的中心对,如下所示:
我有以下查询,
select
t1.session,
t1.center center1,
t2.center center2,
t1.performance - t2.performance performance
from mytable t1
inner join mytable t2 on t1.session = t2.session
where t1.performance - t2.performance = (
select max(t11.performance - t22.performance)
from mytable t11
inner join mytable t22 on t11.session = t22.session
where t11.session = t1.session
)
它可以工作,但需要很长时间,20 列和 200 行的表需要几分钟。如何修改查询以更快地实现相同的输出?
解决方案
select
t1.session,
t1.center center1,
t2.center center2,
t1.performance - t2.performance performance
from mytable t1
inner join mytable t2
on t1.session = t2.session
WHERE t1.performance = (SELECT MAX(performance)
FROM mytable t3 WHERE t3.session = t1.session)
AND t2.performance = (SELECT MIN(performance)
FROM mytable t3 WHERE t3.session = t2.session)
// Im thinking this will solve the border case when performance is a tie
// and difference 0 will return 2 rows
AND (CASE WHEN t1.performance = t2.performance
THEN CASE WHEN t1.center < t2.center
THEN 1
ELSE 0
END
ELSE 1
END) = 1
只要你有一个索引performance
,session
应该没问题。
推荐阅读
- apache-camel - 在 Apache Camel 2.21.5 Olingo4 组件中使用 httpclientBuilder
- angular - Angular 中使用的语法是什么,例如:@NgModule 和 @Component 以及 @Injectable?(使用@符号声明)
- google-apps-script - sheet.isRowHiddenByFilter(n) 不能与切片器一起使用吗?
- php - 是否有任何解决方案可以使用 PHP 在 foreach 中使用不同的变量运行相同的查询?
- python - 如果端口更改,容器化烧瓶应用程序不会加载
- c# - c# GetDirectories 返回意外目录(给出具体示例)
- javascript - 如何查询自定义 HTML 元素?
- excel - 创建一个从列中获取日期范围的 Excel 公式
- jenkins - Github Branch Source 插件和 Github Pull Request Builder 有什么区别
- ansible - 如何使用 Ansible 将多个过滤器拆分为多行?