SQL 服务器对子查询使用不同的 Group By 和 Order By 列

SQL Server use Different Group By and Order By Columns with Sub-query

我正在尝试使用分组集通过查询仅显示组中的某些列。我也想只按某些其他列排序。

为此,我使用了子查询。

我有两个问题:

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

  2. 这样使用子查询会有性能问题吗?

查询:

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

我之所以要这样做是因为我想按与分组依据不同的列进行排序。但是由于我使用的是按查询分组,所以我必须使用所有列。

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

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

您可以只对 ID 使用聚合函数来进行排序。

请注意,子查询的性能损失很小。我能想到的唯一问题是聚合键稍长,因此可能会有非常小的性能损失。