SQL Server使用不同的分组依据和按列排序的子查询

时间:2016-04-24 22:21:30

标签: sql sql-server group-by subquery

我正在尝试仅使用分组集通过查询显示组中的某些列。我也想仅通过其他一些列进行订购。

要做到这一点,我正在使用子查询。

我有两个问题:

  1. 是否有更好的方法来分组并按差异列排序?

  2. 以这种方式使用子查询是否存在性能问题?

  3. 查询:

    SELECT Region, State, Sales FROM (
        SELECT RegionID, Region, StateID, State, SUM(Sales) AS Sales 
        FROM Sales 
            GROUP BY 
                GROUPING SETS(
                    (RegionId, Region, StateID, State), 
                    (StateId, State), 
                    ()
                )
        ) As T1 
    ORDER BY RegionID, StateID
    

    我想要这样做的原因是因为我想按不同的列排序,而不是按我的分组。但由于我使用查询分组,我必须使用所有列。

1 个答案:

答案 0 :(得分:1)

您的查询没问题。但是,我认为您不需要子查询:

SELECT Region, State, SUM(Sales) AS Sales
FROM Sales
GROUP BY GROUPING SETS( (Region, State), (State), () ) 
ORDER BY MAX(RegionID), MAX(StateID);

您可以在ID上使用聚合函数进行排序。

请注意,子查询会导致性能损失很小。我能想到的唯一问题是聚合键稍微长一些,并且可能会有很小的性能损失。