gpt4 book ai didi

SQL 聚合和别名

转载 作者:行者123 更新时间:2023-12-04 23:44:01 26 4
gpt4 key购买 nike

如果项目在表中被多次引用,我有一个查询需要返回一个标量值。

SELECT 
COUNT(*)
FROM
Items
WHERE
FKID = 2003799
GROUP BY
FKID
HAVING
COUNT(*)>1
ORDER BY
COUNT(*)

为什么我不能为聚合分配别名,并在其余查询中引用别名而不是重复聚合函数?

类似于:

SELECT 
COUNT(*) AS CountById
FROM
Items
WHERE
FKID = 2003799
GROUP BY
FKID
HAVING
CountById>1
ORDER BY
CountById

编辑 - 是否有允许相同想法的替代语法?

最佳答案

基本上,答案是...最后解释 SELECT 列表...这基本上是顺序...参见 http://databases.aspfaq.com/database/how-do-i-use-a-select-list-alias-in-the-where-or-group-by-clause.html .

  1. 从 FROM 子句开始,从所有连接、并集、交集和任何其他表构造函数构建一个工作表。 AS 选项允许您为此工作表命名,然后您必须将其用于包含查询的其余部分。

  2. 转到 WHERE 子句并删除不符合条件的行;也就是说,不测试为 TRUE(拒绝 UNKNOWN 和 FALSE)。 WHERE 子句适用于 FROM 子句中的工作。

  3. 转到可选的 GROUP BY 子句,创建组并将每个组减少为一行,用新的分组表替换原始工作表。分组表的行必须是组特征:(1)分组列(2)关于组的统计(即聚合函数)(3)函数或(4)由这三项组成的表达式。

  4. 转到可选的 HAVING 子句并将其应用于分组工作表;如果没有 GROUP BY 子句,则将整个表视为一个组。

  5. 转到 SELECT 子句并构造列表中的表达式。这意味着 SELECT 中的标量子查询、函数调用和表达式在所有其他子句完成后完成。 AS 运算符也可以为 SELECT 列表中的表达式命名。这些新名称立即全部存在,但是在执行 WHERE 子句之后;由于这个原因,您不能在 SELECT 列表或 WHERE 子句中使用它们。

  6. 嵌套查询表达式遵循 block 结构化语言(如 C、Pascal、Algol 等)所期望的常用范围规则。也就是说,最内层的查询可以引用包含它们的查询中的列和表。

关于SQL 聚合和别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4818207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com