Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在一个查询中混合聚合和前1_Sql Server_Sql Server 2012 - Fatal编程技术网

Sql server 在一个查询中混合聚合和前1

Sql server 在一个查询中混合聚合和前1,sql-server,sql-server-2012,Sql Server,Sql Server 2012,在下面的选择中,我有2个聚合和5个前1个字段 select * from ( select sum(case when field2 = 1 then 1 end) over (partition by field0) as field5, max(case when field3 = 1 then field4 end) over (partition by field0) as field6, -- above is 2

在下面的选择中,我有2个聚合5个前1个字段

select *
from (
       select sum(case when field2 = 1 then 1 end) over (partition by field0) as field5,
              max(case when field3 = 1 then field4 end) over (partition by field0) as field6,
              -- above is 2 aggregates

              -- below is select 5 fields based on top 1 order by desc
              row_number() over (partition by field0 order by field1 desc) as rowNum
              field0,
              field1,
              field2,
              field3,
              field4
       from table1
        --in my case i'm doing an innser join on field0 on an inserted table from a trigger
  ) x
-- below is the top 1 related filter
where x.rowNum = 1
有没有更好的方法写这个?(意味着执行计划更快和/或语法更好)

执行计划的当前部分

这应该稍微优化一下:

select field0,
    field1,
    field2,
    field3,
    field4,
    field5,
    field6
from (
    select field0,
        sum(case when field2 = 1 then 1 end) as field5,
        max(case when field3 = 1 then field4 end) as field6,
    from table1
    group by field0
) t1
cross apply
(
    select top 1 field1,
        field2,
        field3,
        field4
    from table1 t2
    where t2.field0 = t1.field0
    order by field1 desc
) ca

这应该稍微优化一下:

select field0,
    field1,
    field2,
    field3,
    field4,
    field5,
    field6
from (
    select field0,
        sum(case when field2 = 1 then 1 end) as field5,
        max(case when field3 = 1 then field4 end) as field6,
    from table1
    group by field0
) t1
cross apply
(
    select top 1 field1,
        field2,
        field3,
        field4
    from table1 t2
    where t2.field0 = t1.field0
    order by field1 desc
) ca

你是什么意思?向我们展示当前的执行计划?性能问题应包括
EXPLAIN ANALYZE
和一些关于表大小、索引、当前时间性能、期望时间等的信息。
Slow
是一个相对术语,我们需要一个实际值进行比较。@JuanCarlosOropeza字段0,1,2,3,4根据行数排名前1(按描述排序)@JuanCarlosOropeza i添加了执行工厂您的图像中执行计划的部分仅占资源成本的8%。我想说,瓶颈可能在于计划的其他部分。是的,我想说的是,图片不完整,因为只有8%是可见的。你是什么意思?向我们展示当前的执行计划?性能问题应包括
EXPLAIN ANALYZE
和一些关于表大小、索引、当前时间性能、期望时间等的信息。
Slow
是一个相对术语,我们需要一个实际值进行比较。@JuanCarlosOropeza字段0,1,2,3,4根据行数排名前1(按描述排序)@JuanCarlosOropeza i添加了执行工厂您的图像中执行计划的部分仅占资源成本的8%。我想说,瓶颈可能在于计划的其他部分。是的,我想说的是,图片不完整,因为只有8%是可见的。