SQL GROUP BY 子句和别名用法:了解限制
SQL 查询处理遵循特定的顺序,影响 GROUP BY
子句中别名的行为方式。本文阐明了这种行为及其根本原因。
让我们检查一个常见的查询问题:
<code class="language-sql">SELECT itemName AS ItemName, substring(itemName, 1,1) AS FirstLetter, Count(itemName) FROM table1 GROUP BY itemName, FirstLetter</code>
此查询存在缺陷,因为 FirstLetter
是 SELECT
子句中定义的别名,在 GROUP BY
子句中使用。 正确的做法是在 substring(itemName, 1,1)
子句中使用实际的表达式 GROUP BY
。
此限制的原因源于标准 SQL 处理顺序:
FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
由于 GROUP BY
子句是在 子句之前执行的,因此在处理 SELECT
子句时,别名 FirstLetter
还不存在。 Oracle 和 SQL Server 等数据库严格遵守此顺序,防止在 GROUP BY
.SELECT
中使用 GROUP BY
子句中的别名
中使用别名的扩展。 这种非标准行为并不普遍一致,因此验证与特定数据库系统的兼容性至关重要。 为了获得可靠、可移植的 SQL,请始终使用 GROUP BY
子句中的基础表达式,而不是依赖别名。GROUP BY
以上是为什么不能在 SQL GROUP BY 子句中使用列别名?的详细内容。更多信息请关注PHP中文网其他相关文章!