SQL 服务器对子查询使用不同的 Group By 和 Order By 列
SQL Server use Different Group By and Order By Columns with Sub-query
我正在尝试使用分组集通过查询仅显示组中的某些列。我也想只按某些其他列排序。
为此,我使用了子查询。
我有两个问题:
是否有更好的方法来按差异列进行分组和排序?
这样使用子查询会有性能问题吗?
查询:
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 使用聚合函数来进行排序。
请注意,子查询的性能损失很小。我能想到的唯一问题是聚合键稍长,因此可能会有非常小的性能损失。
我正在尝试使用分组集通过查询仅显示组中的某些列。我也想只按某些其他列排序。
为此,我使用了子查询。
我有两个问题:
是否有更好的方法来按差异列进行分组和排序?
这样使用子查询会有性能问题吗?
查询:
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 使用聚合函数来进行排序。
请注意,子查询的性能损失很小。我能想到的唯一问题是聚合键稍长,因此可能会有非常小的性能损失。