我正在尝试仅使用分组集通过查询显示组中的某些列。我也想仅通过其他一些列进行订购。
要做到这一点,我正在使用子查询。
我有两个问题:
是否有更好的方法来分组并按差异列排序?
以这种方式使用子查询是否存在性能问题?
查询:
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
我想要这样做的原因是因为我想按不同的列排序,而不是按我的分组。但由于我使用查询分组,我必须使用所有列。
答案 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上使用聚合函数进行排序。
请注意,子查询会导致性能损失很小。我能想到的唯一问题是聚合键稍微长一些,并且可能会有很小的性能损失。