查询中的累计总和

2024-01-16

如何返回行的累积和大于或小于指定值的行?

table:

id | count
-----------
1 | 30
2 | 10
3 | 5
4 | 20
5 | 15

query:

SELECT id, count
FROM table
ORDER BY id
HAVING SUM(count) < 50

返回行:

id | count
-------------
1 | 30
2 | 10
3 | 5

update

code:

public function query(){
    switch($this->table){
        case 'in_stock':
            return "SELECT * FROM ".Init::$static['db'].".stock
                WHERE id<=dynaccount.stock_first_available_id(".$this->value['num_stock'].", ".$this->value['product_id'].", ".(isset($this->att_arr['gid']) ? $this->att_arr['gid']:$_SESSION['gid']).")
                ORDER BY time, id";
    }
}

程序:

DELIMITER $$

DROP FUNCTION IF EXISTS `stock_first_available_id` $$
CREATE DEFINER=`dynaccount`@`localhost` FUNCTION `stock_first_available_id`(_running_total_limit INT, _product_id INT, _group_id INT) RETURNS INT
BEGIN
    DECLARE _running_count INT default 0;
    DECLARE _id INT;
    DECLARE _current_id INT;
    DECLARE _sum_count INT;

    IF (SELECT COUNT(*) FROM stock WHERE group_id=_group_id && type=2 && product_id=_product_id) = 0 THEN
        RETURN 0;
    END IF;

    DECLARE _cur CURSOR FOR SELECT id, count FROM stock WHERE group_id=_group_id && type=2 && product_id=_product_id ORDER BY time DESC, id DESC;

    OPEN _cur;

    read_loop: LOOP
        FETCH _cur INTO _id, _sum_count;

        SET _running_count = _running_count + _sum_count;
        SET _current_id = _id;

        IF _running_count > _running_total_limit THEN
            LEAVE read_loop;
        END IF;
    END LOOP read_loop;

    CLOSE _cur;

    RETURN _current_id;
END $$

DELIMITER ;

error:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE _cur CURSOR FOR SELECT id, count FROM stock WHERE group_id=_group_id &amp;&amp; ' at line 12 

以下查询:

SELECT * FROM 
(SELECT id, 
       count, 
       @running_count := @running_count + count AS Counter 
  FROM sumtest, (SELECT @running_count := 0) AS T1 ORDER BY id) AS TableCount 

WHERE TableCount.Counter < 50;

产生结果:

id  count   Counter
1   30      30
2   10      40
3   5       45

我将你的表复制到 MySql 中,并将其命名为“sumtest”。请替换为您的表名。

实际上,我们按 id 顺序计算出运行总计,然后将其用作子查询。

所以这个查询:

SELECT id, 
       count, 
       @running_count := @running_count + count AS Counter 
FROM sumtest, (SELECT @running_count := 0) AS T1 
ORDER BY id

生产:

id  count   Counter
1   30      30
2   10      40
3   5       45
4   20      65
5   15      80

因此,通过对此执行另一个选择来选择计数器小于所需总和的所有行就变得微不足道了。

编辑:这是一个带有光标的示例。我刚刚为您组合了这个函数(请注意,我的表名为 sumtest,我的帐户是默认的 root@localhost):

DELIMITER $$

DROP FUNCTION IF EXISTS `Test_Cursing` $$
CREATE DEFINER=`root`@`localhost` FUNCTION `Test_Cursing`(_running_total_limit INT) RETURNS int
BEGIN
  /* Why am I on StackOverflow at 01:41 on New Years Day. Dear oh dear, where's the beer? */
  DECLARE _running_count INT default 0;
  DECLARE _id INT;
  DECLARE _current_id INT;
  DECLARE _sum_count INT;

  DECLARE _cur CURSOR FOR SELECT id, count FROM sumtest ORDER BY id;

  OPEN _cur;

  read_loop: LOOP
    FETCH _cur INTO _id, _sum_count;

    SET _running_count = _running_count + _sum_count;

    IF _running_count > _running_total_limit   THEN
      LEAVE read_loop;
    END IF;

    SET _current_id = _id;

  END LOOP;

  CLOSE _cur;

    RETURN _current_id;

END $$

DELIMITER ;

这样称呼它:

SELECT Test_Cursing(50);

将返回 id = 3 - 即超出运行总量限制之前的最后一个 id。然后您可以使用它来:

 SELECT * FROM sumtest WHERE id <= Test_Cursing(50);

返回:

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

查询中的累计总和 的相关文章

  • 无法使用 Django 应用程序从容器连接到 MySQL docker 容器

    当我尝试从运行 Django 应用程序的 docker 容器连接到运行 MySQL 的容器时 出现以下错误 django db utils OperationalError 2003 Can t connect to MySQL serve
  • 通过连接从两个表中删除?

    我有两个表如下 tbl1 tbl2 id article id title image whole news tags author older datetime 其中 tbl1 id gt tbl2 article id 如何从两个表中删
  • PHP PDO相关:更新SQL语句未更新数据库内容

    我正在尝试使用准备好的语句来实现更新语句PHP http en wikipedia org wiki PHP脚本 但它似乎没有更新数据库中的记录 我不确定为什么 所以如果您能分享一些见解 我将不胜感激 Code query UPDATE D
  • 如何以最少的查询次数获取帖子列表和关联标签

    我的表格结构如下 标签 更多的是一个类别 id 标签名称 描述 slug POSTS ID 标题 网址 邮戳 id idPost idTag USERS ID 用户名 userSlug VOTES id idPost idUser 每个帖子
  • 将记录分成两列

    我的数据库中有一个 学生 表 其中包含大约 5 000 条记录 我想将这些记录显示在two分区 如何在不执行查询两次的情况下做到这一点 仅使用单个查询 显示示例http www freeimagehosting net uploads f1
  • ActiveRecord3死锁重试

    Rails 3 或 ActiveRecord 3 是否有任何插件可以复制旧版本死锁重试 http agilewebdevelopment com plugins deadlock retry插入 或者 该插件仍然适用于 Rails 3 吗
  • 使 pdo::query 静态

    当我运行下面的代码时出现此错误 我通常使用 msql 函数 但我尝试使用 PDO 代替 怎么了 致命错误 第 14 行无法静态调用非静态方法 PDO query
  • 无法启动 MySQL 服务器 - 控制进程退出并出现错误代码

    我的 mysql 服务器停止后无法启动 命令使用 sudo etc init d mysql restart Error 重新启动 mysql 通过 systemctl mysql serviceJob for mysql service
  • Python:如何使用生成器来避免 sql 内存问题

    我有以下方法来访问 mysql 数据库 并且查询在服务器中执行 我无权更改有关增加内存的任何内容 我对生成器很陌生 并开始阅读更多有关它的内容 并认为我可以将其转换为使用生成器 def getUNames self globalUserQu
  • PHP 绑定“bigint”数据类型(MySQLi 准备好的语句)

    studentId 57004542323382 companyOfferId 7 sql INSERT INTO studentPlacement companyOfferId studentId VALUES if stmt db gt
  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • 如何正确转义mysql?

    我刚刚发现如果我写 select from tbl where name like foo 然后添加 foo 作为参数及其值 a 用户数据 它不会正确转义 我勒个去 它想要 a 即使我使用参数 我还是忍不住觉得我对 sql 注入持开放态度
  • 使用 PHP 的 MySQL 连接字符串

    我正在尝试通过本地计算机连接到托管在我的服务器上的数据库 我的服务器有cPanel 11 它是一个典型的共享服务器 由CentOS提供支持 安装了PHP和MySQL 准确地说 我在同一台服务器上持有经销商帐户 我想在不同帐户或域之间访问数据
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int
  • Mysql 创建定义器

    我创建了一个在 CentOS Web 服务器上运行的 Intranet Web 应用程序 该应用程序使用另一个本地服务器 始终是 CentOS 作为 MySQL 数据库 在数据库内部我创建了例程 这些例程总是这样开始 CREATE DEFI
  • 如何将ElasticSearch与MySQL集成?

    在我的一个项目中 我计划将 ElasticSearch 与 MySQL 结合使用 我已经成功安装ElasticSearch 我可以单独管理ES中的索引 但我不知道如何用 MySQL 实现同样的功能 我读过一些文件 但我有点困惑 没有明确的想
  • PDO PHP 连接,致命错误

    我的连接类 firstcode php class DB functions public db function construct try db new PDO mysql localhost dbname xxx charset ut
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • 如何从shell脚本自动登录MySQL?

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

随机推荐

  • 如何创建带有 abi 标签的完整轮子?

    尝试从一个空项目创建一个轮子 使用这个setup py setup py from setuptools import setup setup name bla version 1 我调用python setup py bdist whee
  • Google 地图标记可点击区域

    我正在使用这个例子 https github com galex android mapviewballoons https github com galex android mapviewballoons My problem is th
  • 准备 CoreML 模型时出错:CoreML 代码生成不支持“

    我正在修改代码本教程 https www raywenderlich com 164213 coreml and vision machine learning in ios 11 tutorial我收到此错误 为代码生成准备 CoreML
  • 如何在VSTS发布管道空进程中执行exe[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有 Net 解决方案项目 它有多个项目 其中很少有控制台应用程序 我想在发布管道期间作为空进程下的任务执行控制台应用程序之一 如何从
  • AudioKit - 没有声音输出

    我尝试使用AudioKit输出纯正弦波 https github com AudioKit AudioKit https github com AudioKit AudioKit我尝试建立一个像主页一样的新项目 并且还尝试了 Hello W
  • 使用boost库c++搜索目录和子目录中的文件

    我想创建一个应用程序 使用 c 的 boost 库搜索目录和子目录中的文件 我也不想遇到 UNICODE 文件 例如名为 arabic 的文件 的麻烦 那么我该怎么做呢 UPDATE include
  • 如何将数据库引用与反应式 Spring Data MongoDB 结合使用?

    我是 MongoDB 和 Reactor 的新手 我正在尝试检索与其关联的配置文件的用户 这是 POJO public class User private Id String id private String login private
  • 使用 Wavefront Obj 了解法线指数

    我编写了一个 C Obj 文件加载器 但无法正常工作 问题是 在解析一个简单的 obj 文件时 如下所示 Blender v2 62 sub 0 OBJ File www blender org mtllib cube mtl o Cube
  • 在类级别配置 Json.NET 序列化设置

    我希望使用驼峰命名约定对我的类进行序列化和反序列化 我知道我可以使用JsonConvert SerializeObject object settings 如上所述超载here https stackoverflow com a 34071
  • gnuplot 在绘图范围之外的点之间绘制线

    下面在两点之间绘制一条线 myData lt
  • Android 联系人编程同步

    我为我的应用程序设置了一个客户管理器 它将联系人从我的云服务同步到设备 该帐户与其他此类帐户 Google FB 一起显示在 帐户和同步 下 登录后 它将网络联系人同步到您的设备 联系人已链接到该帐户 它们是使用 Android 开发人员网
  • `typedef` 和 `struct` 是 C 函数标准中的吗?

    我使用了一些这样的代码 void A typedef struct B B struct B B b typedef and struct函数内部的定义 它是用 Clang 编译的 但我想知道 1 它们是否是标准的一部分 以及关于 2 它们
  • Android 谷歌地图按钮样式

    我想在我的谷歌地图上放置一个按钮 这非常简单 不过我希望它看起来像谷歌使用的按钮 缩放按钮 定位我按钮 有没有办法我可以 作弊 并找到他们用于按钮的样式 或者以前有其他人创造过这种风格吗 如果您使用反汇编 Google Play Servi
  • 使用 QueryWithResultSet 的 dotnetrdf xml 异常

    我有一个 asp net 项目 我想在其中查询 DBPedia 使用以下代码我收到错误 public string testEndpoint TEST02 SparqlRemoteEndpoint endpoint new SparqlRe
  • 如何在 SwiftUI 中向 TextEditor 添加占位符文本?

    使用 SwiftUI 的新 TextEditor 时 您可以使用 State 直接修改其内容 但是 我还没有找到向其添加占位符文本的方法 现在可行吗 我添加了一个苹果在他们自己的翻译应用程序中使用的示例 这似乎是支持占位符文本的多行文本编辑
  • Unity Ads 4.0 - 奖励广告的多个 OnUnityAdsShowComplete 回调

    使用 Unity Ads SDK 上找到的奖励广告脚本时 我遇到了一个问题 ShowAd IUnityAdsShowListener gt OnUnityAdsShowComplete 增量触发调试日志 我观看的第一个广告返回一行 表明广告
  • gcc 4.8 或更早版本在正则表达式方面是否存在错误?

    我正在尝试在 C 11 代码中使用 std regex 但似乎支持有点错误 一个例子 include
  • “IE8 除外”的条件注释?

    我在用着针对 IE8 但我想为除 IE8 之外的所有浏览器加载一些 JS 我应该使用什么条件注释 编辑 我想知道这是否可行 Thanks 我想为除 IE8 之外的所有浏览器加载一些 JS 我应该使用什么条件注释 要使某些内容出现在不支持 C
  • 在 C/C++ 中声明和使用 FILE * 指针的正确方法是什么?

    在 C C 中声明和使用 FILE 指针的正确方法是什么 应该声明为全局的还是局部的 有人可以举一个很好的例子吗 无论是本地的还是全球的 根本不重要 文件指针的范围与其用途无关 一般来说 尽可能避免全局变量是个好主意 这是一个示例 展示了如
  • 查询中的累计总和

    如何返回行的累积和大于或小于指定值的行 table id count 1 30 2 10 3 5 4 20 5 15 query SELECT id count FROM table ORDER BY id HAVING SUM count