MySQL - 组内计数器

2023-12-08

我想根据升序变量为组中的每一行添加一个计数器。我有一个解决方案,但如果组内的某些变量相等,它就不起作用:

CREATE TABLE tb (
g CHAR(1)
, x  INTEGER
);

INSERT INTO tb (g, x)
VALUES
('a',1)
, ('a',2)
, ('a',10)
, ('b',1)
, ('b',1)
, ('b',10)
;

SELECT g,x, (SELECT COUNT(*)
           FROM tb b
           WHERE a.g = b.g
                 AND a.x > b.x
           ) + 1 AS counter
FROM tb a
;    

我得到的是:

--------------------
| g | x  | counter |
--------------------
| a |  1 |    1    |  
| a |  2 |    2    |  
| a | 10 |    3    |
| b |  1 |    1    |
| b |  1 |    1    |
| b | 10 |    3    |
--------------------

但我想得到:

--------------------
| g | x  | counter |
--------------------
| a |  1 |    1    |  
| a |  2 |    2    |  
| a | 10 |    3    |
| b |  1 |    1    |
| b |  1 |    2    |
| b | 10 |    3    |
--------------------

知道我该如何解决这个问题吗?非常感谢您的提示。
佐丹奴


在解决这个问题时,用户定义的变量变得很方便。这应该有效:

select g, x, counter from (
    select g, x,
        @counter := if (g = @prev_g, @counter + 1, 1) counter,
        @prev_g := g
    from tb, (select @counter := 0, @prev_g := null) init
    order by g, x
) s

如果您真的不介意第四列,那么您可以安全地删除外部选择。这会大大提高性能。

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

MySQL - 组内计数器 的相关文章

  • mysql语句中的*星号是什么意思?

    Ex mysql query SELECT FROM members WHERE id id 这意味着选择表中的所有列
  • MySQL+子串怎么做? + 替换?

    我不太擅长 SQL 希望能够变得更好 我在尝试执行某些表操作时遇到一些麻烦 我希望能够从下面的 ProgUID 列中选择子字符串 就像是 SUBSTRING table ProgUID 3 12 这将为我提供 ProgUID P CAMVE
  • MySQL 服务器未启动

    当我做 mysql u root p并输入my password这就是我得到的 错误 2002 HY000 无法通过套接字 var run mysqld mysqld sock 连接到本地 MySQL 服务器 2 所以我输入 systemc
  • mySQL MATCH 跨多个表

    我有一组 4 个表 我想对其进行搜索 每个都有全文索引 查询可以使用每个索引吗 CREATE TABLE categories id int 5 unsigned NOT NULL auto increment display order
  • 如何以最少的查询次数获取帖子列表和关联标签

    我的表格结构如下 标签 更多的是一个类别 id 标签名称 描述 slug POSTS ID 标题 网址 邮戳 id idPost idTag USERS ID 用户名 userSlug VOTES id idPost idUser 每个帖子
  • 如何在 phpmyadmin 中创建 MySQL 触发器

    我想在 MySQL 中创建一个触发器 我运行以下命令 mysql gt delimiter mysql gt CREATE TRIGGER before insert money BEFORE INSERT ON money gt FOR
  • 当sql连接中存在两个同名列时,如何从一个表列中获取值

    当我连接两个具有相同名称列的表时 我目前面临着尝试获取值的问题 例如 table1 date和table2 date 每个表中的日期不同 我将如何获取 日期 本例中的表1 我目前正在跑步 while row mysqliquery gt f
  • 截断 Mysql 表 Cron 作业?

    我在如何使用 cron 作业截断 Mysql 表时遇到了一些麻烦 无论我尝试什么 我似乎都无法让数据库清除表格 感谢您的帮助 mysql uderp example pexample hlocalhost Dexample e TRUNCA
  • MySQL 使用 ALTER IGNORE TABLE 出现重复错误

    我的 MySQL 中有一个有重复项的表 我尝试删除重复项并保留一项 我没有主键 我可以通过以下方式找到重复项 select user id server id count as NumDuplicates from user server
  • 如何正确转义mysql?

    我刚刚发现如果我写 select from tbl where name like foo 然后添加 foo 作为参数及其值 a 用户数据 它不会正确转义 我勒个去 它想要 a 即使我使用参数 我还是忍不住觉得我对 sql 注入持开放态度
  • 无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地 MySQL 服务器 (2)

    当我尝试连接 mysql 时出现以下错误 Can t connect to local MySQL server through socket var lib mysql mysql sock 2 这个错误有解决办法吗 其背后的原因可能是什
  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • Apache、PHP 和 MySQL 可移植吗?

    我可以在外部硬盘上运行 Apache PHP 和 MySQL 吗 我需要这个 因为我在不同的地方工作 计算机 有时我没有安装和配置所有使用的应用程序 当然可以 XAMPP http www apachefriends org en xamp
  • 忽略重复条目并在 EF Core 中的 DbContext.SaveChanges() 上提交成功条目

    我有一个 ASP Net Core 2 2 Web API 在我的一个控制器操作中 我向 MySQL 数据库表添加了一堆行 我使用的是 Pomelo 例如 dbContext AddRange entities dbContext Save
  • Mysql 创建定义器

    我创建了一个在 CentOS Web 服务器上运行的 Intranet Web 应用程序 该应用程序使用另一个本地服务器 始终是 CentOS 作为 MySQL 数据库 在数据库内部我创建了例程 这些例程总是这样开始 CREATE DEFI
  • PDO PHP 连接,致命错误

    我的连接类 firstcode php class DB functions public db function construct try db new PDO mysql localhost dbname xxx charset ut
  • 如何从shell脚本自动登录MySQL?

    我有一个 MySQL 服务器 其中有一个用户和密码 我想在 shell 脚本中执行一些 SQL 查询而不指定密码 如下所示 config sh MYSQL ROOT root MYSQL PASS password mysql sh sou
  • SQL不允许表中有重复记录

    如何使其不添加重复项 我想让它通过 ID 之外的所有其他列进行检查 我希望这个无效 ID col1 col2 col3 1 first middle last ID col1 col2 col3 2 first middle last 我希
  • 在 MySQL 中存储表情符号的编码问题:如何使用 Prisma ORM 在 NodeJS 中定义字符排序规则?

    亲爱的 Nodejs 专家和数据库专家 我们在 MySQL 数据库中存储表情符号和其他特殊字符时遇到问题 我们使用 Prisma 得到一个错误 这是我们使用的 ORM 参数无法从排序规则 utf8 general ci 转换为 utf8mb
  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤

随机推荐

  • 如何杀死runtime.exec?

    我在 jframe 中使用下面的代码 以便通过 java 程序执行 shell 脚本 但是当我实现其他方法来停止运行进程时 该方法首先被 th 阻止 我无法停止我的程序 所以我必须杀死新进程 问题是如何获取进程的pid以及如何将其放在后台
  • Silverlight tabchanged 事件 - tabcontrol

    我正在使用选项卡控件 并且我想处理 tabchanged 事件 我试图使用SelectionChanged没有运气的事件 它被触发太多次 加载选项卡控件或添加新选项卡后 我想仅当用户在选项卡之间导航时处理此事件 我找到了 WPF 的解决方案
  • VS2013 的开发者命令提示符在哪里?

    我需要从 Visual Studio 2013 中的开发人员命令提示符运行 web exe 文件 默认情况下 Visual Studio 2013 中未安装命令提示符 以前 我使用的是 Visual Studio 2012 它默认安装了开发
  • 迭代多个选择/文件夹项目

    我看了一眼MailItem并且没有看到任何表明我可以移动所选项目的信息 我有可以运行的代码 但是Set objItem GetCurrentItem 线路只接收一封邮件 我正在寻找ForEach通过文件夹 或者ForEach通过选择 我尝试
  • ClassCastException DataSource 无法转换为 javax.sql.ConnectionPoolDataSource

    我收到这个异常 java lang ClassCastException org apache tomcat jdbc pool DataSource cannot be cast to javax sql ConnectionPoolDa
  • 为什么使用“git rm”而不是“rm”来删除文件?

    在 SVN 上 直接从文件系统中删除某些内容 而不是使用 svn 会带来很多麻烦 我在使用时没有发现这是一个问题git 但我注意到 git 有它自己的rm执行 git rm 有什么区别rm and git rm 如果你只是使用rm 你需要跟
  • 画布宽度和高度均为 100% 时质量较差

    我用画布做了一个非常小的例子 它可以在JsFiddle http jsfiddle net yPtr5
  • 如何使用A*算法找到最佳的3条路线

    在 A 中 通常您得到的结果只是一条路径 对于给定的出发地和目的地 是否有可能根据 A 有 3 条推荐路径 所以第二个返回的是第二最佳路径 第三个返回的是第三最佳路径 我正在考虑也许以某种方式修改启发式以反映第二和第三最佳路径 你们觉得怎么
  • 填写特定工作表中多列中的空白单元格

    I have the following columns Score Name Last Name 5460 Name1 Lastname1 2620 340 470 3445 Name2 Lastname2 1290 1170 7460
  • 一键提交两份表格

    我有两种 HTML 表单 一种使用 PHP 在输入数据库时 提交数据 另一种将用户引导至 paypal 付款页面 我的问题是用户必须提交这两种表单 这当然是我不希望他们这样做的得做 有没有办法对两种表单使用一个提交按钮 欢迎使用 JavaS
  • 将 openCV 查找表 (LUT) 应用于图像

    我想申请定制颜色查找表 LUT 在图像上 我已经看过了openCV LUT Api但我似乎无法做对 bin bash coding utf 8 import os import numpy as np import cv2 b max 23
  • pty 终端数据包模式 TIOCPKT

    如果我启动一个终端 我如何知道它以什么模式启动 谁决定呢 我可以以数据包模式启动我的终端吗 TIOCPKT 我遇到了这个包模式链接说 Packet mode is enabled by pushing the pckt module on
  • UnicodeDecodeError,无效的连续字节

    为什么以下项目失败 为什么 latin 1 编解码器能够成功 o a test of xe9 char I want this to remain a string as this is what I am receiving v o de
  • 对类中变量的线程安全访问

    在可能有多个线程运行的应用程序中 并且不确定是否在多线程环境下访问这些方法的可能性 但为了安全起见 我做了一个测试类来演示一种情况 一种方法has被编程为线程安全 如果做得正确 也请发表评论 但其余的则不是 在这样的情况下 里面只有一行代码
  • 大 (> 4mb) 文件附件

    使用 Microsoft Graph API 可以将文件附件添加到消息中 如下所述here 但是 由于 REST 请求的总大小限制为 4mb 因此不允许包含非常大的附件 A 可恢复上传会话允许更大的上传 可以通过提供下载链接的参考附件进行引
  • 使用 Android Parse 的多个组合“或”查询

    在 Android 的 Parse 中 是否可以对多个 OR 子查询进行 AND 操作 我一直在尝试组合两个 OR 查询 但没有成功 根据我的研究 Parse 可能不具备这种能力 不过 我还没有找到任何东西来证实 否认这一点 例如 给定一堆
  • 如何使位图透明?

    param bitmap The source bitmap param opacity a value between 0 completely transparent and 255 completely opaque return T
  • Java 8 中方法引用的外部参数

    我希望将外部参数传递给方法引用 String prefix The number is numbers forEach Main printWithPrefix private static void printWithPrefix Int
  • 保护目录免遭直接 URL 访问

    需要一些帮助 我需要保护所有的FOLDERS in a DIRECTORY from direct URL使用权 我可以这样做吗 htaccess如果是 怎么办 或者他们是更安全的方法 这是我的情况 我允许用户上传 pdf 文件 文件发送至
  • MySQL - 组内计数器

    我想根据升序变量为组中的每一行添加一个计数器 我有一个解决方案 但如果组内的某些变量相等 它就不起作用 CREATE TABLE tb g CHAR 1 x INTEGER INSERT INTO tb g x VALUES a 1 a 2