在简单查询中,GROUP BY字段的顺序与最终结果没有区别(忽略开发人员的易读性).
EG:SELECT COUNT(*) FROM People GROUP BY Age, Gender
将产生与GROUP BY字段被翻转相同的结果.
一般来说,在什么条件下,GROUP BY字段的这种明显的可交换属性会崩溃?
我在这里寻找一般规则(EG:"任何包含依赖于其中一个分组字段的子表达式的表达式")
我很难想出一个关于排序重要的例子 - 但我的直觉告诉我它在某些情况下确实如此.
我认为唯一重要的是使用 ROLLUP 创建小计时
http://msdn.microsoft.com/en-us/library/ms189305(v=sql.90).aspx
CREATE TABLE #Prod
(
ID INT IDENTITY(1,1),
Cat INT,
Size Int
)
INSERT #Prod SELECT 1,1
INSERT #Prod SELECT 1,1
INSERT #Prod SELECT 1,2
INSERT #Prod SELECT 1,3
INSERT #Prod SELECT 1,3
INSERT #Prod SELECT 1,3
INSERT #Prod SELECT 2,1
INSERT #Prod SELECT 2,2
INSERT #Prod SELECT 2,2
INSERT #Prod SELECT 2,3
INSERT #Prod SELECT 2,3
INSERT #Prod SELECT 2,3
SELECT
COUNT(*)
FROM #Prod
GROUP BY Cat, Size WITH ROLLUP
SELECT
COUNT(*)
FROM #Prod
GROUP BY Size , Cat WITH ROLLUP
Run Code Online (Sandbox Code Playgroud)
2 1 3 6 1 2 3 6 12
(受影响的 9 行)
2 1 3 1 2 3 3 3 6 12
(受影响的 10 行)