【问题标题】:Group by required even thought i don't want to group by需要分组,即使我不想分组
【发布时间】:2014-09-02 22:35:06
【问题描述】:

下表有 Key 和 StartTime 和 EndTime。我希望我的查询返回我的键、具有此键的记录数以及具有相同键的所有记录的总分钟数。我不能在我的组中没有 StartTime 和 EndTime 的情况下运行,不幸的是,这组每一行都有不同的开始或停止时间。

SELECT sn.Key, 
        COUNT(*) as SessonNoteCount, 
        sum( dbo.fnCalcTime( sn.StartTime, sn.EndTime)) as min

FROM SessionNote sn 

group by sn.Key,  sn.StartTime, sn.EndTime
order by sn.Key

【问题讨论】:

  • 为什么在GROUP BY 子句中没有sn.StartTimesn.EndTime 就不能运行?在我看来,你可以。但是,正如您所知,使用该功能可以获得非常糟糕的性能。如果您想使用函数抽象时间计算并获得合理的性能,它需要是一个 RETURNS TABLE 函数,其中包含单个 SELECT 语句,创建 WITH SCHEMABINDING 并像 Sum( (SELECT Elapsed FROM dbo.fnCalcTime(sn.STartTime, sn.EndTime)) ) 一样使用。这将允许解析器内联函数体。

标签: sql


【解决方案1】:

您应该按所有未聚合的选定列进行分组,在您的情况下只是sn.Key

group by sn.Key

顺便说一句,恕我直言,group by 子句应该是可选的,因为它完全由列选择的列确定,并且可以很容易地由查询解析器生成,但是那艘船已经航行了……

【讨论】:

    猜你喜欢
    • 2011-09-20
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 2020-08-23
    • 2021-10-17
    • 2021-06-22
    相关资源
    最近更新 更多