在 SELECT 和 ORDER BY 中,COUNT 是否执行两次?

Ale*_*lex 3 sql sql-server sqlxml

我有一个这样的 SQL 查询:

SET @q =
(SELECT Id AS '@Id', COUNT(Occ) AS '@Occ' FROM Details 
 GROUP BY Id
 ORDER BY COUNT(Occ) DESC, Id ASC
 FOR XML PATH('Data'), ROOT('Stats'), ELEMENTS, TYPE)
Run Code Online (Sandbox Code Playgroud)

我设置 AS @Id 和 AS @Occ 以便 FOR XML 指令将输出转换为属性而不是元素。

我的问题: SELECT 和 ORDER BY 中两次出现 COUNT(Occ) 是否会导致计数执行两次,如果是这样,如何防止这种情况发生?

谢谢!

Gab*_*abe 5

旧版本的 SQL 要求子句中出现的任何表达式ORDER BY必须与子句中的列之一完全相同SELECT。这样表达式就不必计算两次。只要两个地方都有完全相同的表达式,就不必执行两次。

事实上,您的排序可以写为,ORDER BY 2 DESC, 1因为您可以只使用从 1 开始的列号,而不必复制表达式。无论使用哪种方式,表达式都不应该执行两次。