SQL GROUP BY字段在所有情况下都是可交换的吗?

Ste*_*eve 11 sql database

在简单查询中,GROUP BY字段的顺序与最终结果没有区别(忽略开发人员的易读性).

EG:SELECT COUNT(*) FROM People GROUP BY Age, Gender将产生与GROUP BY字段被翻转相同的结果.

一般来说,在什么条件下,GROUP BY字段的这种明显的可交换属性会崩溃?

我在这里寻找一般规则(EG:"任何包含依赖于其中一个分组字段的子表达式的表达式")

我很难想出一个关于排序重要的例子 - 但我的直觉告诉我它在某些情况下确实如此.

Zep*_*eph 4

我认为唯一重要的是使用 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)

查询 1 的结果

2 1 3 6 1 2 3 6 12

(受影响的 9 行)

查询 2 的结果

2 1 3 1 2 3 3 3 6 12

(受影响的 10 行)