为什么 where 子句中不允许使用聚合函数

2024-04-22

我正在寻求对此的澄清。我在下面写了两个查询:

我们有一个员工姓名表,其中包含 ID 、姓名、薪水列

  1.  Select name from employee 
    where sum(salary) > 1000 ;

  2.  Select name from employee 
    where substring_index(name,' ',1) = 'nishant' ;

查询 1 不起作用,但查询 2 起作用。根据我的开发经验,我觉得对此可能的解释是:

sum() 适用于参数中指定的一组值。这里 'salary' 列已传递,因此它必须将所有值相加 柱子。但是在where子句中,记录是一一检查的, 例如检查第一条记录 1 进行测试等等。因此 sum(salary) 将不会被计算,因为它需要访问所有列 值,然后只有它会返回一个值。

查询 2 的工作原理是 substring_index() 作用于单个值,因此这里它作用于提供给它的值。

你能验证一下我的理解吗?


无法使用的原因SUM() in the WHERE子句是子句的评估顺序。

FROM告诉您从哪里读取行。当行从磁盘读取到内存时,会检查它们的WHERE状况。 (实际上在很多情况下,失败的行WHERE子句甚至不会从磁盘读取。 “条件”的正式名称为谓词查询执行引擎使用一些谓词来决定从基表中​​读取哪些行。这些被称为access谓词。)如您所见,WHERE子句应用于呈现给引擎的每一行。

另一方面,只有在读取所有行(验证所有谓词)后才进行聚合。

想一想:SUM()仅适用于满足以下条件的行WHERE状况。如果你把SUM() in the WHERE子句,您要求循环逻辑。新行是否通过WHERE条款?我怎么会知道?如果它会通过,那么我必须将其包含在SUM,但如果不是,则不应将其包含在SUM。那么我该如何评估SUM健康)状况?

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

为什么 where 子句中不允许使用聚合函数 的相关文章

  • 如何在 Windows 上的 PostgreSQL 中创建具有 UTF-8 排序规则的数据库?

    我正在为 Windows 上的 Bitbucket 服务器配置 PostgreSQL 数据库 在官方guide https confluence atlassian com bitbucketserver connecting bitbuc
  • WebMatrix sql LIKE %

    我在执行以下查询时遇到问题 当我使用静态参数直接从 WebMatrix 执行它并返回几行时 它可以工作 但不能从我的 cshtml 页面执行 var accounts database Query SELECT Username Email
  • 使用准备好的语句设置表名称

    我正在尝试使用准备好的语句来设置表名以从中选择数据 但在执行查询时不断收到错误 错误和示例代码如下所示 Microsoft ODBC Microsoft Access Driver Parameter Pa RaM000 specified
  • SSIS ODBC SQL 参数

    我在 odbc 源数据流任务中有一个 SQL 命令需要采用参数 但不存在添加参数的选项 我尝试将数据库添加为与 ODBC 提供程序的 ADO NET 连接 但也没有可用的参数 还尝试将其作为 OLEDB 连接 但没有可用于 ODBC 的提供
  • PostgreSQL 索引使用分析

    是否有工具或方法可以分析 Postgres 并确定应创建哪些缺失的索引 以及应删除哪些未使用的索引 我在使用 SQLServer 的 分析器 工具执行此操作方面有一些经验 但我不知道 Postgres 中是否包含类似的工具 我喜欢这样来查找
  • MS-Access:合并彼此“下方”的两个表

    我的 Access 数据库中有两个表 它们看起来像这样 Table1 Kabelnummer Column1 Column2 Column3 1 x x x 2 x x x
  • 字段名称来自表 1 上的 ID,但来自其他表上的名称

    这是一个 Firebird 数据库 第一张表 联系人 Company ID 职位名称 第二个表 Client id 公司名称 在联系人中 我希望 job title 字段包含 co name client id 和 company id 相
  • SQL 与 LINQ 性能 [关闭]

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

    通过表单提交文件时 如何将原始文件名 file jpg 上传到数据库 控制器 public function addCv Request request cv Cv create request gt all file request gt
  • 为什么 Redshift 不需要物化视图或索引?

    In the 红移常见问题解答 https aws amazon com redshift faqs under 问 与大多数用于数据仓储和分析的传统数据库相比 Amazon Redshift 的性能如何 它说如下 高级压缩 列式数据存储比
  • SQL Server 选择具有最近日期时间的记录

    我有一张表如下 MyJob MyKey MyCode MyDate MyTime q183b 0131081a 24 100315 9 37 q183b 0131081a 9 100315 11 38 q183b 0132426a 1 90
  • 使用 Oracle 中的 Join 查询进行更新

    查询有什么问题 它无限期地执行 UPDATE table1 t1 SET t1 col t1 Output SELECT t2 col t3 Output t2 col FROM tabl2 t3 LEFT JOIN table1 t2 O
  • 是否可以使用不在 GROUP BY 中的 ORDER BY 列?

    正如标题所说 这是我的代码 SELECT material SUM Amount AS Amount RIGHT CONVERT varchar 50 date in 106 8 FROM rec stats GROUP BY materi
  • 选择返回动态列

    我有两个表 标准和服务产品 一个标准可以有多个服务产品 每个标准可以有不同数量的与其关联的服务产品 我需要做的是编写一个视图 该视图将返回一些常见数据 然后在一行上列出服务产品 例如 Standard Id Description SO 1
  • 在 CASE 语句中使用 CAST 时出现数据转换错误

    运行以下命令时出现错误 将数据类型 nvarchar 转换为 float 时出错 declare completeCommand nvarchar max x paramVal nvarchar 100 paramName nvarchar
  • 在 SQL 中,如何获取特定列中具有最大值的行?

    我有一个疑问 SELECT COUNT as votes a member id FROM ballots a WHERE ballot id 1 GROUP BY a member id 这会产生类似的结果 votes member id
  • mysql中相同字符集和排序规则的varchar和nvarchar有什么区别

    谁能告诉我具有相同字符集和整理的 varchar 和 nvarchar 之间有什么区别 例子 varchar CHARACTER SET utf8mb4 COLLATE utf8mb4 unicode ci and nvarchar CHA
  • 如何在PostgreSQL事务中使用变量

    如何在 Postgresql 事务内部将值获取到变量中 如果 SELECT 没有返回任何内容 则抛出错误 如果 SELECT 返回数据 则在事务中使用它们 像这样 BEGIN activeRounds SELECT FROM rounds
  • 通过 SQL 中的查询显示组中的非聚合列

    我在 SQL 2008 中有一个表 ID Items 1 A 1 B 2 C 3 D 3 B 我想得到的结果是 ID Items 1 A B 2 C 3 B D 我使用了游标 但它大大减慢了过程 我可以使用按查询分组或通过任何其他方式实现上
  • 从用户定义的函数调用 sql

    SQL Server 2008 是否可以从用户定义函数中的变量执行 sql 或者使用存储过程是唯一的解决方案 我有一条sql语句保存在variabele中 mySqlStatement select from someTable 我想从用户

随机推荐

  • 如何在 Xcode 4 中使用 .xcconfig 文件?

    我刚刚切换到 Xcode 4 但在使用 xcconfig 文件进行构建设置时遇到问题 我的目标已经在 Xcode 3 中分配了文件 并且已全部设置完毕 标题为 Config file 的列显示在 构建设置 的 级别 视图中 但我不知道如何编
  • 如何创建一个修改结构体的函数

    我正在制作一个程序 使用结构将学生成绩放入数组中作为期末练习 我需要创建一个函数来检查数组中是否还有任何位置 如果没有 则数组的大小需要加倍 然后需要将成绩添加到下一个可用位置 如果数组有空缺职位 则应将等级值添加到下一个可用职位 每当数组
  • 如何确定我的应用程序是在 x86 还是 x64 Windows 上运行?

    我想知道 在运行时 我是在 32 位还是 64 位 Windows 上运行 OSVERSIONINFOEX 结构告诉我主要版本和次要版本 但我猜我需要内部版本号 有人知道它们是什么吗 如果您的应用程序是针对 64 位编译的 那么答案很简单
  • 测试登录用户在 Laravel 4 中具有正确的 id

    我正在尝试弄清楚如何测试 Laravel 4 中的登录用户是否可以访问正确的用户帐户 目前这就是我的routes php 文件中的内容 Route get user id array before gt auth function logg
  • 方案功能[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我试图解释这个方案函数的作用 define y s lis cond null lis equal s car lis lis else
  • 如何将 FragmentTabHost 选项卡放在屏幕底部?

    我已经尝试过以下代码 它对齐选项卡小部件上方的框架布局 但它仍然不起作用
  • 在 Android 中以编程方式添加 FilterChips

    我正在尝试做出一个有多种选择的芯片选择 就我而言 我将有动态选择 因此我必须动态创建芯片 我成功地动态创建了它 但由于多重选择需要一个名为style style Widget MaterialComponents Chip Filter 我
  • Linux 内核:为什么调用 kstrtol 会崩溃?

    我正在学习内核编程 并且对 kstrtol 进行了简单的调用 我用它来将字符串转换为数字 然而 每次我编译这个模块并使用 insmod 将其放入内核时 我都会收到 BUG 无法处理 f862b026 处的内核分页请求 然后是寄存器和堆栈转储
  • 对象不支持项目分配错误

    In my views py我在保存表单之前分配值 我以前是按以下方式做的 projectForm lat session results lat projectForm lng session results lng 现在 由于变量列表有
  • DACPAC 不包括复合对象

    我有一个 VS2012 数据库项目 其中包括表 存储过程 视图等 然后我有第二个数据库项目 其中包含对第一个项目的数据库引用 我已确保从 项目属性 gt 调试 gt 高级 菜单中选择 包括复合对象 选项 当我构建第二个项目并获取生成的 DA
  • 为什么我可以通过字符串索引来获取属性值但不能设置它?

    我试图解决这另一个问题的问题 https stackoverflow com questions 67809891 is it possible to reduce generic objects with unknown property
  • 如何在Android中制作倒计时器?

    我有两个 XML 格式的 EditText 在一个 EditText 中 用户可以输入一个数字作为分钟 在另一个 EditText 中输入一个数字作为秒 单击完成按钮后 EditText 应该开始倒计时并每秒更新其文本 此外 我怎样才能保持
  • 如何使用 T-SQL 或 .net 代码将 Mdf/ldf 数据库文件转换为 .bak 文件(数据库恢复)

    我有 sql server 数据库文件 Mdf Ldf 我想使用 T SQL 命令或 net 代码 C 或 Vb net 将它们转换为备份文件 有什么建议 thans BACKUP DATABASE NameOfDatabase TO DI
  • 使用套接字时避免垃圾收集

    在我的一个游戏项目中 我尽力避免创建对象 从而阻止垃圾收集器运行 这是一个网络游戏 我主要发送数据的字节数组 但也发送一些其他对象 例如 int 数组 我在分析 Eclipse 中的内存分配时注意到 通过我向套接字写入 读取的方式 在我的程
  • 无法使用变异成员...因为追加?

    我很困惑为什么会收到此错误 swift 4 2 1 next select only entries in range let filteredDataOpt TimeSeriesEntry filteredApps map data in
  • VS 2015 到 2017 迁移到包参考失败

    我继承了一个 VS 2015 C 应用程序 并希望将其迁移到 VS 2017 或 2019 它有一个包含 4 个包的 packages config 文件
  • R:循环数据框,根据日期提取数据子集

    我有一个大型数据框 其中包含如下所示的数据 date w x y z region 1 2012 01 21 43 12 3 NORTH 2 2012 02 32 54 21 16 NORTH 3 2012 03 14 32 65 32 N
  • Java中的构造函数和new运算符

    从类创建新对象Student在Java中我们通常使用以下语句 Student std new Student 我读过 new 运算符通过在堆中分配内存空间来创建新对象 但是我还读到调用构造函数Student 创建它 所以 这有点令人困惑 哪
  • 如何在 Hamcrest 中使用(原始)自动装箱/加宽?

    我碰到https code google com p hamcrest issues detail id 130 https code google com p hamcrest issues detail id 130为 Hamcrest
  • 为什么 where 子句中不允许使用聚合函数

    我正在寻求对此的澄清 我在下面写了两个查询 我们有一个员工姓名表 其中包含 ID 姓名 薪水列 1 Select name from employee where sum salary gt 1000 2 Select name from