SQL聚合函数选择唯一值

2024-03-26

我有一个包含两列的行集:technical_id and natural_id。行集实际上是复杂查询的结果。假设列值之间的映射是双射的(即对于具有相同值的两行)technical_id the natural_ids 也相同,对于不同的technical_ids the natural_ids 也不同)。这(technical_id,natural_id)由于原始查询中的联接,对在行集中不唯一。例子:

with t (technical_id, natural_id, val) as (values
  (1, 'a', 1),
  (1, 'a', 2),
  (2, 'b', 3),
  (2, 'b', 2),
  (3, 'c', 0),
  (3, 'c', 1),
  (4, 'd', 1)
)

不幸的是,双射仅由应用程序逻辑强制执行。这natural_id实际上是从多个表中收集并使用coalesce基于表达式,因此其唯一性很难通过数据库约束来强制执行。

我需要通过以下方式聚合行集的行technical_id假设natural_id是独特的。如果不是(例如如果元组(4, 'x', 1)添加到示例数据中),查询应该失败。在理想的 SQL 世界中,我会使用一些假设的聚合函数:

select technical_id, only(natural_id), sum(val)
from t
group by technical_id;

我知道SQL中没有这样的功能。有其他选择或解决方法吗? Postgres 特定的解决方案也可以。

注意group by technical_id, natural_id or select technical_id, max(natural_id)- 尽管在快乐的情况下工作得很好 - 两者都是不可接受的(首先是因为technical_id在所有情况下结果必须是唯一的,其次是因为该值可能是随机的并掩盖了数据不一致)。

感谢您的提示:-)

更新:预期的答案是

technical_id,v,sum
1,a,3
2,b,5
3,c,1
4,d,1

或失败时4,x,1也存在。


您只能使用以下方法获取“唯一”自然 ID:

select technical_id, max(natural_id), sum(val)
from t
group by technical_id
having min(natural_id) = max(natural_id);

如果您希望查询实际上失败,那就有点难以保证。这是一种巧妙的方法:

select technical_id, max(natural_id), sum(val)
from t
group by technical_id
having (case when min(natural_id) = max(natural_id) then 0 else 1 / (count(*) - count(*)) end) = 0;

和一个 dbfiddle 说明.

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

SQL聚合函数选择唯一值 的相关文章

  • 将数据导入mysql的最佳方法

    我有一个包含 500 000 行和大约 10 列的表 该表处于访问状态 我如何将其导入到mysql 这是关于该主题的文章 http www kitebird com articles access migrate html http www
  • 在 SQL 中合并具有重叠日期范围的记录

    编辑 我们当前的服务器是 SQL 2008 R2 因此 LAG LEAD 功能将不起作用 我正在尝试获取表中的多个数据流并将它们组合成 1 个数据流 鉴于下面的 3 个数据流 我希望最终结果是 1 个优先考虑状态 on 的流 递归似乎是最好
  • Hstore 和 Rails

    我正在尝试使用最新版本的 activerecord postgres hstore gem 在 Rails 3 2 9 项目中使用 Hstore 但在使用 ActiveRecord 提供的 store accessor 来获取 Hstore
  • 在 SQL 查询中使用聚合函数

    我的表结构是这样的 ATT Table Fields Act ID Assigned To ID Percent Complete Integer value Act ID is primary key Assigned To ID is
  • postgres union 是否保证调用有副作用的函数时的执行顺序?

    我正在使用 postgres 9 3 并尝试确保从 sql 语句调用时按顺序调用存储过程 以下操作是否有效 确保首先调用 foo 然后调用 bar select null void from select 1 from foo union
  • sql查询使用pivot动态添加会计月份

    ALTER PROCEDURE dbo sp GetDMActivityTrackerReport CoachId VARCHAR 7 Month INT FiscalYear INT AS BEGIN INSERT FiscalMonth
  • C# 中的多个 SQL 查询将变量作为列返回

    我正在开展一个创建注册系统的学校项目 我选择的数据库方法是使用 T SQL 因为它是我已经熟悉的东西 我正在使用下面的代码来查询数据库 public void button3 Click object sender EventArgs e
  • 通过 SQL Developer 连接时出现 ora-12505 错误

    我正在尝试使用 SQL Developer 远程连接到 Oracle 12c 数据库 为了从另一台计算机进行远程连接 我在运行 Oracle 的计算机上在 Windows 7 防火墙中打开了一个端口 该部分有效 但现在由于此错误 ORA 1
  • 在 MySQL 中存储 IPv6 地址

    正如 需要支持 ipv6 的 inet aton 和 inet ntoa 函数 http bugs mysql com bug php id 34037 目前没有用于存储 IPv6 地址的 MySQL 函数 用于存储 插入的推荐数据类型 函
  • SQL 中的模糊分组

    我需要修改 SQL 表以对稍微不匹配的名称进行分组 并为组中的所有元素分配标准化名称 例如 如果初始表如下所示 Name Jon Q John Q Jonn Q Mary W Marie W Matt H 我想创建一个新表或向现有表添加一个
  • EntityFramework 6 AddOrUpdate 不适用于复合或复合主键

    这个问题是我周末的噩梦 我有一张桌子AddOrUpdate无法正常工作 它不断添加但从不更新 我想做的就是当我使用以下命令将新实体添加到表中时AddOrUpdate我想要它检查AppointmentId and CompletionCode
  • SQL 查询返回按周、月和年分组的记录。没有记录的周数应返回 0

    给出以下数据 ID CreatedDate ID1 2014 06 04 01 40 56 880 ID8 2014 06 05 00 27 02 403 ID6 2014 06 04 01 51 47 060 ID7 2014 06 05
  • 无法使用 LISTAGG

    SELECT deptno LISTAGG ename WITHIN GROUP ORDER BY ename AS employees FROM emp GROUP BY deptno Error ORA 00923 FROM keywo
  • BigQuery 中的 EXP() 返回浮点错误

    我有以下查询 SELECT EXP col FROM project dataset tablename Where col is FLOAT 但是 我收到此错误 Error Floating point error in function
  • 适用于 Web 照片库的正确 NoSQL 数据架构

    我正在寻找为照片库的 NoSQL 存储构建合适的数据结构 在我的网络应用程序中 一张照片可以是一个或多个相册的一部分 我有使用 MySQL 的经验 但几乎没有使用键值存储的经验 使用 MySQL 我将设置 3 个表 如下所示 photos
  • ORA 00904 错误:无效的标识符

    我已经在虚拟 XP 中安装了 Oracle 10g 并使用以下命令创建了一个表 create table reg1 fname varchar2 30 lname varchar2 30 addr varchar2 30 mail varc
  • 课程完成时更新外部数据库

    我的场景 Moodle 中的用户完成了一门课程 一旦发生这种情况 我想更新外部数据库 我的理解是 每次运行 cron 作业时都会触发 course completed 事件 使用一些简单值 例如已完成课程的用户名 ID 课程 ID 以及完成
  • Athena date_parse 用于具有可选毫秒字段的日期

    我在 S3 中有日期 使用它创建了 Athena 表 我在 S3 中有一些 json 格式的日期条目 在运行查询时 Athena 不接受这些条目作为日期或时间戳 使用 AWS Athena 它使用 Prestodb 作为查询引擎 示例 js
  • 将上一行值减去当前行

    我有下表 id value acc no 1 12 1 2 14 1 3 15 1 4 10 2 5 16 2 6 19 1 7 7 3 8 24 2 预期产出 id value acc no result 1 12 1 12 curren
  • 将 SQL 依赖关系与 Azure 结合使用

    在我的本地数据库中 Sql 依赖关系工作正常 但是当我迁移到 Azure 数据库时 它就不起作用了 我检查服务代理是否已启用 并且它已激活 这是错误 此版本的 SQL Server 不支持语句 RECEIVE MSG 这是我的代码 publ

随机推荐

  • 将特定枚举反序列化为 Json.Net 中的 system.enum

    我有一个相当通用的 规则 类 我用它来驱动我正在编写的分析引擎的行为 public class Rule
  • 了解 REST 响应和 HTTP 状态代码

    我想知道我应该如何在 REST API 中做出响应 有效示例 http blah com api v1 dosomething 123 以上是一个有效的请求 目前我的 HTTP 状态为 200 并带有 JSON 响应 dosomething
  • 未访问请求数据时出现 Flask 405 错误且路径有效

    当我实际上没有对连续的相同请求使用请求正文时 我收到 405 错误 Example app Flask name CORS app app route login methods POST def login return jsonify
  • .NET 4.5 中的序列化异常

    当我调用时 我得到了这个堆栈跟踪 XslCompiledTransform Transform XmlDocument DocumentElement CreateNavigator null StringWriter System Con
  • 为我的组件位图属性赋值时发生访问冲突[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试创建一个必须使用位图的组件
  • INSTALL_FAILED_INVALID_APK 错误,调试版本代码 1 与 0 不一致

    我在 Android Studio 版本 2 3 3 上构建了一个 Android 应用程序 当我尝试将应用程序部署到手机 lennovo 或模拟器 GenyMotion 时 出现错误 内容如下 INSTALL FAILED INVALID
  • ASP.net C# 将 int 解析为日期时间

    给定时间 1286294501433 它表示自 1970 年以来经过的毫秒数 我们如何将其转换为 DateTime 数据类型 例如 transactionTime 1286294501433 UInt64 intTransTime UInt
  • 在哪里可以看到 deno 下载的软件包?

    我是新来的deno目前正在探索 deno 的最小可行项目 我想要喜欢 npm 它会下载文件夹内的 npm 包node modules 同样我想看到迪诺包在一个目录中 在我当前的项目中 我没有看到任何下载的包 请建议我在哪里寻找 deno 软
  • Odoo 服务器无法在 Windows 10 中启动

    我在其官方社区版本页面上下载并安装了 odoo 13 然后当我安装一切正常并启动 odoo 时 浏览器会打开 localhost 8069 即 odoo 端口 并且不会打开任何内容 服务器只是不打开开始 我运行 odoo bin 这是我的错
  • Python 中的循环列表迭代器

    我需要迭代一个循环列表 可能很多次 每次都从最后访问的项目开始 用例是连接池 客户端请求连接 迭代器检查指向的连接是否可用并返回它 否则循环直到找到可用的连接 我怎样才能在Python中巧妙地做到这一点 If you instead nee
  • 在 iPhone SDK 上实现动画的最佳方法?

    我知道如何通过移动 调整 UIView 的大小来实现基本动画 不过下面两个动画就显得有点复杂了 1 想象一下汽车游戏 当您按下踏板按钮时 车速表就会旋转 如何制作那种条形 填满 圆形的动画 2 第二个动画更容易描述 如何制作数字增加的动画
  • FactoryGirl:填充具有许多关系的保留构建策略

    我的问题似乎很常见 但我没有在文档或互联网本身中找到任何答案 这似乎是这个问题的克隆has many 同时尊重factory girl 中的构建策略 https stackoverflow com questions 1506556 has
  • 有关使用 TortoiseGit 与 SVN 存储库交互的说明?

    多年来 我一直在 Windows 上使用 TortoiseSVN 为我自己的项目提供本地文件系统存储库 我计划开始与一位朋友合作开发其中一个项目 并将存储库转移到我自己的网站上 我读过很多 git 击败 SVN 的文章 过去几年的帖子 我想
  • 使用 helm 进行 Kubernetes 作业更新

    我有一个 Kubernetes 集群 我正在使用 Helm 在那里部署我的应用程序 一切工作正常 但一方面是工作更新 正如我所读到的 作业是不可变的 这就是它们无法更新的原因 但我不明白 为什么 helm 不像 Pod 那样创建新作业 最后
  • 在 .NET Core 项目中添加 PDF 链接

    我想将 PDF 文件添加到我的 net core 2 0 项目中 它在我的本地主机上使用 IIS Express 运行 我已经将 pdf 文件添加到我的项目文件中 它显示在解决方案资源管理器中 并且我在中添加了相应的链接我的 cshtml
  • HTML5视频播放器:动态加载视频

    那么 使用兼容 HTML 5 的视频播放器 如 Video JS 如何动态加载视频 而无需重新加载整个页面呢 想象一下 一个链接列表 类似于播放列表 每个链接都指向一个视频 单击链接时 我想将所选视频加载到播放器中 目前 我正在使用一个包含
  • 在vim中打开目录

    我是一名 mac 用户 正在认真尝试 vim 我习惯的大多数 GUI 编辑器都允许我通过执行以下命令来将目录作为 项目 打开 编辑 www example com vim 等效项vim www example com 将显示目录中的文件列表
  • 如何将 STDERR 重定向到 STDOUT,但忽略原始 STDOUT? [复制]

    这个问题在这里已经有答案了 我有一个程序STDERR我想要检查并运行的输出grep on etc 所以我可以将其重定向到STDOUT并使用 grep 但问题是 我这样做not想要原件STDOUT内容 所以 这个不行 cmd 2 gt 1 g
  • 为什么选择静态类而不是单例实现?

    静态与静态 单例问题之前在 SO 中已经讨论过很多次了 然而 所有的答案都指出了单例的许多优点 我的问题是 静态类比单例有什么优点 为什么不每次都简单地选择一个单例呢 静态类是你盒子里的一个技术工具 基本上是一个语言功能 Singleton
  • SQL聚合函数选择唯一值

    我有一个包含两列的行集 technical id and natural id 行集实际上是复杂查询的结果 假设列值之间的映射是双射的 即对于具有相同值的两行 technical id the natural ids 也相同 对于不同的te