使用分组更新

2023-12-14

我对看似简单的 UPDATE 语句感到困惑。

我正在寻找使用两个值的更新。第一个 (a) 用于分组,第二个 (b) 用于查找相应组内的局部最小值。额外一点,b 上有一个阈值:任何 1 或更小的值都应保持原样。

drop table t1;
create table t1 (a number, b number);
insert into t1 values (1,0);
insert into t1 values (1,1);
insert into t1 values (2,1);
insert into t1 values (2,2);
insert into t1 values (3,1);
insert into t1 values (3,2);
insert into t1 values (3,3);
insert into t1 values (4,1);
insert into t1 values (4,3);
insert into t1 values (4,4);
insert into t1 values (4,5);


-- 1,0 -> 1,0
-- 1,1 -> 1,1
-- 2,1 -> 2,1
-- 2,2 -> 2,2
-- 3,1 -> 3,1
-- 3,2 -> 3,2
-- 3,3 -> 3,2  <-
-- 4,1 -> 4,1
-- 4,3 -> 4,3  <-
-- 4,4 -> 4,3  <-
-- 4,5 -> 4,3  <-

显然还不够的是:

update t1 x
   set b = (select min(b) from t1 where b > 1)
;

无论我尝试什么更复杂的东西,例如

UPDATE t1 x
   set (a,b) = (select distinct a,b from (
                    select a, min(b) from t1 where b > 1 group by a)
               )
;

我明白了 SQL-Fehler: ORA-01427: Unterabfrage für eine Zeile liefert mehr als eine Zeile 01427. 00000 - “单行子查询返回多于一行”

这并不奇怪,因为 a 的每个值都需要一行。

当然,我可以编写带有游标循环的 PL/SQL 过程,但是在单个优雅的 SQL 语句中是否可能?也许使用分区方式?


你的问题有点令人困惑。 你说你想设置值b为分区中的最小值a那一栏b位于行中,而包含的行b = 1应保持不变。

从我在你的问题中看到的评论(我假设这是你的预期输出)你还想得到下面的最小值1在一个分区内 - 所以你基本上想要的最小值b大于1.

下面是执行此操作的 SQL 查询

UPDATE t1 alias
  SET b = (
    SELECT min(b) 
    FROM t1 
    WHERE alias.a = t1.a 
      AND t1.b > 1 -- this would get the minimum value higher than 1
    GROUP BY a
  )
  WHERE alias.b > 1 -- update will not affect rows with b <= 1

更新后输出

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

使用分组更新 的相关文章

随机推荐

  • 如何以编程方式访问 Maximo 列表 where 子句

    在 Maximo 的 WOTRACK 应用程序中 我需要找到某种方法以编程方式访问当前窗口查询的 where 子句 很明显 它存在于 Maximo 中的某个位置 因为您可以在 UI 中的 高级搜索 gt Where 子句 下访问它 我需要找
  • 如何在HSQLDB和C#.net之间建立连接?

    如何在HSQLDB和C net之间建立连接 我已经看过 SharpHSQL 和 H2Sharp 但无法连接 HSQLDB 尝试这样 确保您已添加 hsqldb dll IKVM OpenJDK Core dll IKVM OpenJDK J
  • 仅使用 C 从 STDIN 读取一行以提取数字标记

    问题陈述 需要处理从 STDIN 接受的输入字符串 并仅查找字符串中存在的所有数字标记 将标记视为由空格分隔的可打印字符序列 在数字标记中 所有字符都是数字 您需要构建一个新字符串 其形式为 numeric token1 numeric t
  • iptables 脚本阻止除所需应用程序之外的所有互联网访问

    CONTEXT 我想要一个 shell 脚本来阻止所有到我的计算机的入站 出站流量 除非我决定要使用浏览器或其他应用程序 在这种情况下 我会调用它并且只有这些应用程序会运行 我研究了以前由聪明人制作的脚本 最后有源链接 并投入时间自己学习使
  • 随机生成 Spritekit 节点

    我正在制作一个游戏 其中有一个节点正在生成并从屏幕顶部掉落 但是我想让节点以 3 秒之间的随机时间间隔生成 因此 1 秒内生成一个 2 4 秒内生成下一个 1 7 秒内生成下一个 依此类推 我正在努力解决这个问题的代码应该是什么 我目前用于
  • “void();”是什么意思作为一个单独的语句在 C++ 中意味着什么? [复制]

    这个问题在这里已经有答案了 这个程序如何编译良好 int main void Does this create a void object here 我已经在 MSVC 和 GCC 下进行了测试 但void是一个不完整的类型 当您对任何其他
  • Android:在 Android Studio 中链接外部静态 C/C++ 库

    我已经看到了许多使用 Cmake 在 Android Studio 中运行本机代码的答案 但是 关于如何将预编译的 C C 库包含到 Android 中的答案却很少 以下是我尝试让本机库 首先尝试使用 a 工作所采取的步骤 1 mylib
  • 如何将 CropVariants 添加到 TYPO3 Flexform 中的图像字段

    我可以像这样覆盖 TCA 中图像字段的cropVaraints columnsOverrides gt image gt label gt LLL EXT myext Resources Private Language locallang
  • RSA 密钥转换为 PEM 文件

    如何转换此 RSA 公钥 109120132967399429278860960508995541528237502902798129123468757937266291492576446330739696001110 6039072308
  • Google 表格图表中的标题

    当我第一次在 Google 表格中创建图表时 标题位于一个可移动的框中 我可以在图表框中选择并拖动它 如果我随后以编程方式更改该标题 例如 chart chart modify setOption title ChartTitleNameR
  • 为什么我的 CLLocation 速度这么不准确?

    我正在使用 iPhone SDK 我想在我的应用程序中显示当前的速度 有很多应用程序可以做到非常精确 特别是对于跑步或骑自行车等低速情况 我见过的最好的是 RunKeeper 但是 在我的应用程序中 速度绝对不准确 在低速下 它始终为空 只
  • 判断Python是否处于交互模式

    在Python脚本中 有什么方法可以判断解释器是否处于交互模式 这很有用 例如 当您运行交互式 Python 会话并导入模块时 会执行略有不同的代码 例如 关闭日志记录 我看过判断python是否处于 i模式并尝试了那里的代码 但是 该函数
  • Android 中菜单中的图标不显示

    我想将菜单处理程序添加到我的项目中 我读http developer android com guide topics ui menus html同样 它很简单 但没有显示图标 我很困扰 我什至以编程方式添加了一个菜单项 我的代码是 Ove
  • 如何向合并的Word表格添加行?

    这就是桌子的样子 Code Sub WordTableTester Dim CurrentTable As table Dim wdDoc As Document Dim Rw As Long col As Long Dim wdFileN
  • jquery 验证远程响应格式

    尝试使用远程方法验证昵称 rules nickname required true remote checknick php 检查尼克就在这里 name addslashes POST nickname sql select from na
  • Docker:多阶段构建会产生多个镜像

    给出这个多阶段构建的小例子 FROM node 10 AS ui build WORKDIR usr src app FROM node 10 AS server build WORKDIR root EXPOSE 3070 ENTRYPO
  • Perl 内存使用分析和泄漏检测?

    我用 Perl 编写了一个在 Linux 上运行的持久网络服务 不幸的是 随着它的运行 它的驻留堆栈大小 RSS 不断增长 缓慢但稳定地增长 尽管我努力清除所有不需要的哈希键并删除对对象的所有引用 否则会导致引用计数保持不变并阻碍垃圾收集
  • GAE/J 该应用程序不存在 (app_id=u'application-id')

    我使用 maven gae plugin 来部署我的应用程序 它可以正常工作 直到我决定将其部署到不同 Google 帐户下的另一个应用程序 ID 我遇到了 此应用程序不存在 的问题 我发现 StackOverflow 中已经有一些答案 但
  • Laravel 4:通过验证之前和之后验证开始和结束日期

    我想验证表单中的两个日期字段 即 from date 和 end date 需要检查 from date 是否小于 end date rules array from date gt array sometimes date format
  • 使用分组更新

    我对看似简单的 UPDATE 语句感到困惑 我正在寻找使用两个值的更新 第一个 a 用于分组 第二个 b 用于查找相应组内的局部最小值 额外一点 b 上有一个阈值 任何 1 或更小的值都应保持原样 drop table t1 create