where 和having 关于别名的区别

2024-04-02

如果我在中创建一个别名select那么我不能在where子句因为根据sql查询的执行顺序where出现在之前select.

但我可以在中创建一个别名select子句并将其用于having虽然条款having出现在之前select.

为什么会这样呢?

Ex:

select type, (case when number>25 then 1 else 0 end) inc 
from animals
where inc='1';

这行不通。但,

select type, (case when number>25 then 1 else 0 end) inc 
from animals
having inc='1'; 

这有效。为什么这样?


基本上是因为它们是为了不同的目的而定义的。这WHERE子句用于记录过滤,HAVING子句设计用于过滤聚合函数 (GROUP BY)。 在你的第二个查询中隐式GROUP BY正在使用过滤,因此,例如,如果您向SELECT条款你最终会得到不同的结果。

EDIT基于马丁·史密斯的修正

HAVING创建是为了允许过滤由GROUP BY。当没有GROUP BY指定时,整个结果被视为一个组。

如果两者都不是<where clause> nor a <group by clause>被指定, 然后令 T 为前面的结果<from clause>

or

...该组是 如果没有则整个表<group by clause>已指定

EDIT 2现在关于别名:

关于搜索条件中的列引用的 WHERE 子句规范如下:

Each <column reference>直接包含在<search condition>将 明确引用a columnT 或为外部参考。

参考:7.6<where clause>,语法规则 1。

有关搜索条件中列引用的 HAVING 子句的规范如下:

Each <column reference>直接包含在<search condition>应明确提及分组列的 T 或作为外部参考。

参考:7.8<having clause>,语法规则 1。

And a 分组栏定义为:

中引用的列<group by clause>是一个分组列。

所以综上所述WHERE必须引用表的列和HAVING子句必须引用行组的分组列。

(第二次非正式审查草案)ISO/IEC 9075:1992,数据库 SQL 语言 - 1992 年 7 月 30 日 http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

where 和having 关于别名的区别 的相关文章

  • 多个数据库连接

    我有三张桌子 categories content info and content The categories表包含类别的id及其 IDparent类别 The content info包含两列 entry id帖子的 ID 和cat
  • SSIS使用列位置而不是名称导入Excel文档

    我想知道是否可以通过按位置引用列来使用 SSIS 导入 Excel 文档 例如 导入列 A D M AA 等 我问这个问题是因为我需要从第三方加载多个 Excel 文档 每个文档在相应的列中包含相同的数据类型 但每个文档的列名称不同 Tha
  • JOOQ 查询 JOIN ON WITH 子句

    如何编写 JOOQ 查询来连接 with 子句中的字段 例如 我尝试过 create with a as select val 1 as x val a as y select from tableByName a join ANOTHER
  • 如何在可能为空值的字段上创建唯一索引(Oracle 11g)?

    这是包含 3 列的示例表 ID UNIQUE VALUE UNIQUE GROUP ID 我希望可以允许以下记录 1 NULL NULL 2 NULL NULL or 3 NULL 7 4 123 7 or 注意 此条件不允许unique
  • Sybase 中神秘的“时间戳”数据类型是什么?

    我最近在工作中发现 Sybase 数据库中的一个表使用 时间戳 类型的列 如果我使用这种神秘的时间戳数据类型创建一个表 如下所示 create table dropme foo timestamp roo int null insert i
  • 如何使用 WHERE x IN 子句编写PreparedStatement 的SQL?

    我有一个如下所示的查询 SELECT last name first name middle initial FROM names WHERE last name IN smith jones brown 我需要能够对 IN 子句中的列表进
  • Django 模型 - 外键作为主键

    我有以下2张表 在 models py 中 class Foo models Model uuid models CharField UUID primary key True default uuid4 and class FooExt
  • 如何列出表中的所有列?

    对于各种流行的数据库系统 如何列出表中的所有列 对于 MySQL 请使用 DESCRIBE name of table 只要您使用 SQL Plus 或 Oracle 的 SQL Developer 这也适用于 Oracle
  • 如何使组合键唯一?

    I am making a database of students in one school Here is what I have so far 如果您不喜欢阅读 请跳至 简而言之 部分 问题是我对这个设计并不满意 我想要的组合gra
  • 仅当所有记录都匹配时 SQL 连接

    我有3张桌子 CP carthead idOrder CP cartrows idOrder idCartRow CP shipping idCartRow idShipping dateShipped 每个 idOrder 可以有多个 i
  • 尝试通过比较不同的表从 SQL 查询输出正确的值

    我对 SQL 非常陌生 需要有关如何使用正确的查询完成此任务的帮助 我有 2 张桌子需要使用 表 TB1 有 id Name 1 bob 2 blow 3 joe 表 TB2 有 compid property 1 bob 2 blow 我
  • 什么时候应该使用 XML 而不是 SQL? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用全文搜索查找精确匹配

    使用 Sql Server 2008 如何使用全文搜索来实际找到精确的字符串匹配 我对此感到非常困难 而且我在网上找不到令人满意的解决方案 例如 如果我正在搜索字符串 Bojan Skrchevski 我希望第一个结果正是如此 到目前为止
  • 如何查询多个链接服务器?

    链接一些 SQL Server 2008 服务器 实例后 我想对这些服务器进行更通用的查询 我知道我必须像这样指定查询的命运 select from SRV INSTANCE dbname dbo foo 但是 我会针对多个链接服务器运行此
  • SQL/C# - UPSERT 上的主键错误

    UPDATE 简化的问题 从问题中删除了 C 在以下情况下 如何编写一个可以识别两行相同的 UPSERT 看看怎么有一个 b 退格键 在那里编码 奇怪的小字符 SQL 将它们视为相同 虽然我的 UPSERT 将此视为new data并在应该
  • 使用 SqlDataReader.IsDBNull 时使用列名

    我已经得到了从 SQL DB 读取数据的代码 我不知道应该如何编辑它 以便我可以使用原始列名称而不是列索引 string query SELECT FROM zajezd WHERE event thisrow AND year klien
  • JOOQ 忽略具有默认值的数据库列

    看来JOOQ完全忽略了数据库列的默认值 既不会更新 ActiveRecord 对象 也不会在 INSERT 时跳过此列 相反 它尝试将其设置为 NULL 这在 NOT NULL 列上失败 Example CREATE TABLE bug f
  • PostgreSQL:有效地将 JSON 数组拆分为行

    我有一个表 表 A 其中包含一个包含 JSON 编码数据的文本列 JSON 数据始终是一个包含一到几千个普通对象的数组 我有另一个表 表 B 其中有几列 包括数据类型为 JSON 的列 我想从表 A 中选择所有行 将 json 数组拆分为其
  • SQL Server:触发器如何读取插入、更新、删除的值

    我在一张表中有触发器并且想阅读UserId插入 更新或删除行时的值 怎么做 下面的代码不起作用 我收到错误UPDATED ALTER TRIGGER dbo UpdateUserCreditsLeft ON dbo Order AFTER
  • 对带有空白 NVARCHAR 或 NULL 检查的 VARCHAR 索引进行 Count(*) 会导致返回的行数加倍

    我有一张桌子 上面有VARCHAR列及其上的索引 每当一个SELECT COUNT 是在这张表上完成的 该表检查了COLUMN N OR COLUMN IS NULL它返回双倍的行数 SELECT 与相同的where子句将返回正确的记录数

随机推荐

  • WPF文本渲染问题

    我创建了一个类似于 TabControl 的自定义控件 它工作得很好 除了当我调整内容大小时标题项中的文本变得模糊 例如 它可以如下所示 不仅文本 文本周围的框也可能变得不垂直 查看 常规 项周围的蓝色边框 是什么导致了这个问题 我已设置
  • 专门化类模板构造函数

    我正在搞乱模板专门化 并且在尝试根据所使用的策略专门化构造函数时遇到了问题 这是我试图开始工作的代码 include
  • 从 lapply 返回匿名函数 - 出了什么问题?

    当尝试使用创建类似函数的列表时lapply 我发现列表中的所有函数都是相同的 并且等于最终元素应该是什么 考虑以下 pow lt function x y x y pl lt lapply 1 3 function y function x
  • 无法将 HTTPS 与 ServerXMLHTTP 对象一起使用

    我支持通过 HTTPS 连接到支付网关的经典 ASP 应用程序 直到最近还没有出现任何问题 几天前 最新的更新安装在服务器 Windows Server 2003 上并导致网站崩溃 下面是一个代码片段 Dim oHttp Dim strRe
  • lucene.net 排序不起作用访问冲突

    我正在尝试在 lucene 中对结果进行排序 但是我不断收到此错误 Search dll 中发生 System AccessViolationException 类型的未处理异常 附加信息 尝试读取或写入受保护的内存 这通常表明其他内存已损
  • 为什么小数相加不正确?

    我正在开发一个程序 您可以选择最多 3 件您想要分配积分的事情 举例来说 某项操作可让您获得 4 分 这 4 分将分配到您选择的 3 件事中 在本例中 这 3 件事各得 1 33333 分 在我的数据库中 它们存储为 1 33 然而当我把它
  • 如何在 Windows 上安装 pywebkitgtk?

    如何在 Windows 上安装 pywebkitgtk Windows 7的 我看过这个问题的答案 Windows 上的 Python webkit gtk https stackoverflow com questions 3949060
  • 整理一行中的多个对象

    我有一行来自数据库 select John Name Male Gender 20 Age Rex PetName Male PetGender 5 PetAge many more 使用 Dapper 我想将此行拉入两个对象 class
  • 核心数据迁移——如何将两个实体合二为一

    我有一个包含两个实体的旧核心数据模型 第一个实体 FirstString 有一个属性 string1 它是 NSString 第二实体 SecondString 有一个属性 string2 它是 NSString 它们具有一对多关系 第一个
  • SymPy 和复数的平方根

    使用时solve为了计算二次方程的根 SymPy 返回可以简化的表达式 但我无法让它简化它们 一个最小的例子如下所示 from sympy import sqrt 24 70 I 在这里 SymPy 只是返回sqrt 24 70 I 而 M
  • 如何动态更改悬停和按下的 extjs 按钮的背景

    你好 我需要能够动态更改按钮不同状态 正常 悬停 按下 的背景颜色 到目前为止我想到的如下 http jsfiddle net suamikim c3eHh http jsfiddle net suamikim c3eHh Ext onRe
  • 为什么方法参数不适用于赋值?

    在 Ruby 中 与许多语言一样 方法的参数不会自动分配为实例变量 这有效 def initialize a a a end 这不会 def initialize a end 例如 在 CoffeeScript 中 这是有效的 constr
  • 升级到 .net 4 时 MembershipUser / System.Web.ApplicationServices 出现问题

    我有一个大型 vb net Web 项目 我正在尝试将其升级到 net4 VS2010 在编译期间我收到以下错误 程序集 System Web Version 4 0 0 0 Culture neutral PublicKeyToken b
  • 如何在没有gradle或Maven或Eclipse的情况下将jar文件添加到java项目中

    我可以添加一个jar文件到我在桌面上手动创建的 Java 项目without使用 gradle Maven 或任何依赖管理工具或任何 Java IDE 目前该项目是一个包含 5 个 java 文件的文件夹 我从终端运行它 是否可以在此类项目
  • 如何使用 BigQuery DML 转换嵌套在数组、结构体、数组内的结构体的某些字段?

    我认为这是问题的一个更复杂的版本更新 BigQuery 中结构体数组中的值 https stackoverflow com questions 61408952 update values in struct arrays in bigqu
  • MySQL 中 int 转字符串

    可以做这样的事情吗 本质上 我想将一个 int 转换为一个字符串 并在连接上使用该字符串 注意 t1 id select t2 from t1 join t2 on t2 url site com path t1 id more where
  • Mule 方法无法转换为字符串

    我对骡子工作室很陌生 这是环境设置 VM1 Windows 7 Visual Studio 2012 IIS 7 IIS 7 中托管的 net 4 5 WCF Web 服务 具有接受字符串并返回字符串的操作 VM2 Ubuntu 13 4
  • Titanium 用于 Windows 平台上的 iOS 开发

    我已经下载了 Windows 平台的 Titanium 正确安装后 我发现它需要iOS SDK 那么我应该从哪里获取iOS SDK 在Windows平台上可以开发iOS吗 使我的 Hello World 示例在适用于 iOS 的 Windo
  • 错误:R 中的下标类型“列表”无效

    这里有一个问题 我正在使用 eclipse 参数创建一个函数来处理不同的函数参数 我重新创建了类似的情况来显示我不断遇到的问题 gt d lt data frame alpha 1 3 beta 4 6 gamma 7 9 gt d alp
  • where 和having 关于别名的区别

    如果我在中创建一个别名select那么我不能在where子句因为根据sql查询的执行顺序where出现在之前select 但我可以在中创建一个别名select子句并将其用于having虽然条款having出现在之前select 为什么会这样