在SQL中寻求性能改进

严酷的乔希

场景:表中有2列,数据如下例所示。对于“ a”列的同一值,该表可能有多行。

在示例中,考虑“ a”列,“ 1”有三行,“ 2”有一行。

样本表“ t1”:

| a | b |
| 1 | 1.1 |
| 1 | 1.2 |
| 1 | 2.2 |
| 2 | 3.1 |

要求是获得以下输出:

预期查询输出:

| a | b |
| 1 | 1.2 |
| 2 | 3.1 |

要求:

  • 如果列“ a”的给定值只有一行,则获取该行。
  • 如果对于列'a'有多个行具有相同的值,并且对于所有行,FLOOR(b)== a,则获得MIN(a)和MAX(b)
  • 如果列“ a”有多行,并且所有行都有,则列“ b”有1行FLOOR(b)> a,则忽略该行。从剩余的行中获得MIN(a)和MAX(b)

我使用的查询:

select distinct min(a) over(partition by table1.a) as a,
min(b) over(partition by table1.a) as b
from (
    SELECT  distinct Min(table2.a) OVER (PARTITION BY table2.a) AS a, 
    Max(table2.b) OVER (PARTITION BY table2.a) AS b
    FROM t1 table2
  union
    SELECT  distinct Min(table3.a) OVER (PARTITION BY table3.a) AS a, 
    Max(table3.b) OVER (PARTITION BY table3.a) AS b
    FROM t1 table3 
    where table3.a = FLOOR(table3.b)
) table1;

此查询正在运行,我正在获得所需的输出。通过删除上面的脚本中的联合和额外选择来寻找改进的输入。

注意:在我的情况下,t1不是表,但它是一个过程调用,并且它还会返回其他列。如果可以避免对该过程的额外调用,则将有所帮助。

赤角铁蛋白

这就是我如何获取所需数据的方式。

select t1.a, max(t1.b) 
  from (select a, b, count(1) over(partition by t1.a) cnt from t1) t1
 where t1.a = floor(t1.b) or cnt = 1
 group by t1.a ,cnt;

它只有一个过程调用,因此它可能运行得更快

并且请注意,“联合”子句不仅附加了两个数据集,而且还删除了重复项。删除重复项会导致在数据集之间进行其他检查,因此会导致性能问题。

在大多数情况下,最好使用不检查重复项的“全部合并”

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

字典中的分数计算以寻求改进

来自分类Dev

SQL性能降低(改进插入到临时表中)

来自分类Dev

SQL Select查询性能改进

来自分类Dev

SQL查询性能改进的建议

来自分类Dev

SQL Select查询性能改进

来自分类Dev

MS Access SQL连接性能改进

来自分类Dev

MySQL中的SQL改进

来自分类Dev

改进R中split()函数的性能?

来自分类Dev

核心数据关系中的性能改进

来自分类Dev

numpy数组转换中的性能改进

来自分类Dev

openmp 中嵌套 for 循环的性能改进失败

来自分类Dev

php newbie在Magento中寻求有关改进代码的建议

来自分类Dev

从表中删除重复的ID-性能改进

来自分类Dev

C#中ForEach循环的性能改进技巧?

来自分类Dev

从表中删除重复的ID-性能改进

来自分类Dev

Python的性能改进基础

来自分类Dev

Haskell的性能改进

来自分类Dev

RandomAccessBuffer的性能改进

来自分类Dev

缓存的malloc性能改进

来自分类Dev

改进Python for loop的性能?

来自分类Dev

python配置模板性能改进

来自分类Dev

SpannableStringBuilder的性能改进了吗?

来自分类Dev

SpannableStringBuilder的性能改进了吗?

来自分类Dev

Java多线程性能改进

来自分类Dev

MakeSignature.signDetached性能改进

来自分类Dev

python配置模板性能改进

来自分类Dev

使用PowerShell 5或>更新zipfile。寻求改进的工作代码

来自分类Dev

如何以良好的性能改进查询以使用SQL Server拆分字符串

来自分类Dev

如何以良好的性能改进我的查询以使用SQL Server拆分字符串