是否有可能以这种方式使用 AGG 函数进行 SQL 查询?

2023-11-29

假设我有以下聚合函数:

  • AGG1
  • AGG2
  • AGG3
  • AGG4

是否可以像这样编写有效的 SQL(以与数据库无关的方式):

SELECT [COL1, COL2 ....], AGG1(param1), AGG2(param2) FROM [SOME TABLES]
WHERE [SOME CRITERIA]
HAVING AGG3(param2) >-1 and AGG4(param4) < 123
GROUP BY COL1, COL2, ... COLN
ORDER BY COL1, COLN ASC
LIMIT 10

其中 COL1 ... COLN 是正在查询的表中的列,param1 ... paramX 是传递给 AGG 函数的参数。

注意:AGG1和AGG2在结果中作为列返回(但不会出现在HAVING CLAUSE中,AGG3和AGG4出现在HAVING CLAUSE中但不会在结果集中返回。

理想情况下,我想要一个与数据库无关的解决方案答案,但如果我必须绑定到数据库,我将使用 PostgreSQL (v9.x)。

Edit

只是需要澄清一下:我不反对在查询中使用 GROUP BY。我的 SQL 不是很好,所以上面的示例 SQL 可能有点误导。我编辑了上面的伪 sql 语句,希望能让我的意图更清楚。

我想知道的主要问题是使用 AGG 函数的选择查询是否可以:

  • 在返回的列中包含聚合函数值,而无需在 HAVING 子句中指定它们。
  • 在 HAVING 子句中指定聚合函数,但不会在结果集中返回。

从迄今为止我收到的答案来看,这两个问题的答案似乎都是肯定的。我唯一需要纠正 SQL 的想法是添加 GROUP BY 子句以确保返回的行是唯一的。


PostgreSQL 主要版本包含点后的第一个数字,因此“PostgreSQL (v9.x)”不够具体。正如@kekekela所说,没有(便宜的)完全与数据库无关的方法。即使在 PostgreSQL 9.0 和 9.1 之间也存在重要的语法差异。

如果您只有分组值AGG1(param1), AGG2(param2)如果不提供明确的信息,你就会逃脱GROUP BY条款。由于您混合了分组列和非分组列,因此您have to提供一个GROUP BY子句中出现的所有非分组列SELECT。对于任何版本的 PostgreSQL 都是如此。阅读GROUP BY 并在手册中包含它.

从版本开始9.1但是,一旦您在GROUP BY您可以跳过此表的其他列,并仍然在SELECT列表。这版本 9.1 的发行说明告诉我们:

当主查询目标列表中允许非 GROUP BY 列 键在 GROUP BY 子句中指定 (Peter Eisentraut)

关于参数

您打算向聚合函数提供恒定值吗?重点是什么?这文档告诉我们

聚合函数根据多个输入行计算单个结果。

或者您希望这些参数是列名称?只要生成语句,这种动态 SQL 就可以工作before提交到数据库。不适用于准备好的语句或简单的语句sql or plpgsql功能。你必须使用EXECUTE in a plpgsql为此目的而发挥作用。

作为针对 SQLi 的防护措施,请使用USING $1, $2语法为values and quote_ident()对于您的列或表names.

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

是否有可能以这种方式使用 AGG 函数进行 SQL 查询? 的相关文章

  • 拆分列中的字符串并在列中添加值

    我有一个包含几行数据的表 如下所示 16 W 2 Work ALBO 00 Proposal ALxO Amendement 1 20091022 signed pdf 17 W 2 Work ALBO 00 Proposal Level1
  • Mysql 检索所有有限制的行

    我想检索特定用户的所有行 限制为 0 x 所以我只是想问是否有任何方法可以检索 mysql 中的所有行 而不调用返回 x 的 count id 的方法 而不重载现有函数 该函数在查询中根本没有限制 与我们的 string Relace 功能
  • Oracle:使用SQL或PL/SQL查找动态SQL中的错误位置

    如何在 PL SQL 或 SQL 中找到动态 SQL 语句中的错误位置 从 SQL Plus 中 我看到了错误的位置 例如 无效的 SQL DML 语句 SYS orcl gt SELECT 2 X 3 FROM 4 TABLEX 5 TA
  • 在sqlite SQL语句中与order by子句结合使用limit

    下面的两条 SQL 语句总是会产生相同的结果集吗 1 SELECT FROM MyTable where Status 0 order by StartTime asc limit 10 2 SELECT FROM SELECT FROM
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 如何在 PostgreSQL 中使用具有多个值的 SQL LIKE 条件?

    有没有更短的方法来查找多个匹配项 SELECT from table WHERE column LIKE AAA OR column LIKE BBB OR column LIKE CCC 这个问题适用于 PostgreSQL 9 1 但如
  • 了解 SSMS 2008 中关系的更新和删除规则

    当我们定义外键约束时 我对 SQL Server 2008 Management Studio 中的更新和删除规则的含义感到困惑 我也没有找到相关的帮助文档 例如F1帮助 这是屏幕快照 如果有人能描述它们的含义并推荐一些相关文档来阅读 我将
  • PHP 通过 SSL 连接到 MS SQL

    我想要实现的目标非常简单 我想通过安全连接从 PHP 脚本连接到外部 MS SQL 数据库 然而 这已被证明是有问题的 到目前为止 经过三个小时的研究 我不知所措 客户端的平台是Ubuntu 这意味着我无法使用SQLSRV 安全连接已经在不
  • 初级SQL部分:避免重复表达式

    我对 SQL 完全陌生 但我们可以说StackExchange 数据浏览器 https data stackexchange com 我只想按信誉列出前 15 位用户 我写了这样的内容 SELECT TOP 15 DisplayName I
  • 内连接不重复,可以吗?

    鉴于这两个表 表 A1 有两行具有相同的值 a A1 a a 表 A2 有两行主键值为 A B 它们与 a 关联 A2 PK col2 A a B a 我想要的是 A1 和 A2 的连接并得到这个结果 a A a B 显然内连接在这里不起作
  • MyBatis:在一个查询中通过注释收集

    我有一个 xml 映射器 一个选择映射器和一个结果映射器 它工作没有问题 但我想使用注释 我的映射器
  • 在 C#.NET 应用程序中使用 SQL Server 时间数据类型?

    如何使用 SQLtimeSQL Server 2008 中 C NET 中引入的数据类型 我一直在努力让它发挥作用 但没有成功 这是一个MSDN 文章 http msdn microsoft com en us library bb6751
  • XML 解析:格式良好的检查:未声明的实体

    我正在使用 SSMS 2008 但收到以下错误 你知道这意味着什么吗 Msg 9448 Level 16 State 1 Line 4 XML parsing line 1 character 89 well formed check un
  • 比较两个 postgres 转储文件

    如何比较 postgres 转储文件 我有两个转储文件 dump1 和 dump2 我想比较这两个转储文件 任何帮助将不胜感激 谢谢 如果使用 Windows 则可以使用 Beyond Compare 如果使用 linux fedora 则
  • 在 postgres 查询中使用列表

    我有一个动态列表 list a b c d 所以长度可能会改变 我想在查询中比较这些列表值 select from student where name in all the list values 我想将列表值传递到此查询中 我怎样才能做
  • SQL不允许表中有重复记录

    如何使其不添加重复项 我想让它通过 ID 之外的所有其他列进行检查 我希望这个无效 ID col1 col2 col3 1 first middle last ID col1 col2 col3 2 first middle last 我希
  • 如何在NiFi中映射流文件中的列数据?

    我有 csv 文件 其结构如下 Alfreds Centro Ernst Island Bacchus Germany Mexico Austria UK Canada 01 02 03 04 05 现在我必须将这些数据移入数据库 如下所示
  • SQL Server 上的语法错误

    这可能是一个愚蠢的语法错误 但我只是继续阅读我的程序 但我无法弄清楚我的错误在哪里 消息 156 第 15 级 状态 1 第 41 行关键字附近的语法不正确 为了 这是我的代码 alter procedure LockReservation
  • SQL 国家字符 (NCHAR) 数据类型的真正用途是什么?

    也CHAR CHARACTER and VARCHAR CHARACTER VARYING SQL 提供了NCHAR NATIONAL CHARACTER and NVARCHAR NATIONAL CHARACTER VARYING 类型
  • MS ACCESS 计数/求和行数,不重复

    我有下表 我需要计算总行数而不包括任何重复记录 CustomerID test1 test1 test2 test3 test4 test4 如您所见 总行数为 6 但有两个 test1 和两个 test4 我希望查询返回 4 IOW 我想

随机推荐

  • 检测用户空闲(每个应用程序实例)

    我只需要在我的应用程序中进行用户空闲检测 每个 我的应用程序实例 我不能使用获取最后输入信息因为是特定于会话的用户输入 获取最后输入信息does not跨所有正在运行的会话提供系统范围的用户输入信息 相反 GetLastInputInfo
  • Convert Vuejs Typescript Options to Composition Api 中的奇怪问题

    问题已经解决 通读问题以了解如何逐步解决问题 我读到了有关组合 API 的内容 https vue composition api rfc netlify com api introduction 并尝试转换我现有的基于 vuejs 中 O
  • 当 Sphero 同步并且我使用多个 Activity 时如何保持蓝牙连接

    当我与 Sphero 同步并且想要从一个活动传递到另一个活动时 我的同步丢失了 我必须在新活动中执行 onCreate 中的此方法才能再次获得同步 RobotProvider provider RobotProvider getDefaul
  • 如何在 Java SE 环境上部署 JAX-RS 应用程序?

    我想使用 JAX RS 编写 RESTful Web 服务 并且想将其发布到本地主机上 例如http localhost port 我在这篇文章中读到了以下内容answer Java SE 7 JSR 336 和 Java SE 8 JSR
  • Python:检查异常引发的位置

    采取这个代码 def A try B except Exception pass def B C def C print exception handling pointer A 功能exception handling pointer应该
  • javascript确认函数确定和取消返回相同的结果

    在这里 我打电话confirm param1 param2 显示警报的方法Do you want to continue 在这种情况下 如果用户单击OK 它返回true 如果用户点击Cancel 它返回false 但是 当单击取消按钮时 它
  • Keras:使用 flow_from_directory 的 fit_generator 的多个输入

    fit generator 中是否可以有两个 flow from directory 例如 train generator 1 train datagen flow from directory train data dir 1 targe
  • 布尔运算符 ++ 和 --

    今天 在编写一些 Visual C 代码时 我遇到了一些令我惊讶的事情 看来 C 支持 bool 的 增量 但不支持 减量 这只是一个随机决定 还是背后有某种原因 这编译 static HMODULE hMod NULL static bo
  • Windows 批处理文件中的字符串处理:如何用前导零填充值?

    在 Windows cmd 批处理文件 bat 中 如何填充数值 以便将 0 99 范围内的给定值转换为 00 到 99 范围内的字符串 IE 我希望小于 10 的值有前导零 您可以使用一个两阶段的过程 REM initial setup
  • 日期时间到纪元的转换

    我有一个 bash 问题 使用 awk 时 我正在提取文本文件中第一列和第五列的每个实例 并使用以下代码将其通过管道传输到新文件 cut f4 test170201 rawtxt awk stream 0 print 1 5 gt test
  • bash 中的转义引号(嵌入式 awk)

    我有一个复杂的命令通过 ssh 传递到远程服务器 我正在尝试解压缩一个文件 然后在第二个 ssh 命令中更改其命名结构和扩展名 我的命令是 ssh root server1 gzip d tmp file out 20171119 gz e
  • 使用 PHP 通过 SSL 连接到 MySQL

    我正在编写第一个脚本 它将通过 SSL 连接到 MySQL 数据库 我已经阅读了大量有关该主题的文章 并且遇到了许多关于如何设置它的选项 有些适用于我的情况 有些则不适用 这是我的情况 MySQL 服务器与脚本位于同一台计算机上 我的 SS
  • d3.js 中的转换队列;逐个

    我尝试在 d3 js 中进行链式转换 为此 我在数组中定义了一组转换 并 尝试 创建一个函数来递归调用它们 each end function 在前一个完成时开始转换 但我还没有结果 行动清单 animations function con
  • 如何调试MEF异常?

    我们目前正在使用 MEF 托管扩展性框架 http mef codeplex com 并且它会抛出异常 而可供继续处理的信息有限 有没有办法调试 MEF 异常 我的例外是这样的 System Reflection ReflectionTyp
  • 绑定动态加载的fxml的宽度和高度

    目前 我在运行时动态加载 FXML 文件时遇到问题 一旦将它们添加到窗格中 它们就不会调整大小以使用该窗格的完整宽度和高度 我使用此方法在窗格中加载 FXML public void showContentPane String sURL
  • Facebook 连接对话框弹出窗口

    当使用 连接 facebook 连接按钮时 当我单击它时 它会在当前窗口之外打开一个新的弹出窗口 这很烦人 我如何才能使用大多数网站上的内联模式对话框 我附上了一个示例网站 看看您是否可以利用它来制作任何东西 http www gigloc
  • 在 C 中从布尔值设置位掩码的快速方法

    执行检查并设置 清除标志是很常见的 例如 if some test flag SOME FLAG else flag SOME FLAG 到目前为止我发现的一个方便的方法是 flag some test flag SOME FLAG fla
  • 使用 Pyomo 或 cvxpy 预测建筑物的功率(模型预测控制)

    我有室外温度的数据 8 2 10 13 并且我有我的建筑物的热惯性 8h 限制之一是将我的建筑物的内部温度保持在 20 度以内 我们从平衡状态开始 T in 20 T o 20 但一小时内的 T o 18 因此 Delta T o 18 度
  • 在 Meteor 中指定内容类型 (JavaScript)

    如何在 Meteor 中指定内容类型 我有一个返回 JSON 的页面 但响应标头是html text我需要做到application json 我在用iron router然后通过模板显示json 我只需要更改该页面的响应标头 我该怎么做
  • 是否有可能以这种方式使用 AGG 函数进行 SQL 查询?

    假设我有以下聚合函数 AGG1 AGG2 AGG3 AGG4 是否可以像这样编写有效的 SQL 以与数据库无关的方式 SELECT COL1 COL2 AGG1 param1 AGG2 param2 FROM SOME TABLES WHE