mysql - 查找导致 SUM 变为 0 的第一条记录

标签 mysql sql database

我正在使用 MySQL 5.5 存储如下表:

sequence  category  value
1         A         100
2         A         200
3         A        -300  # sum becomes 0
4         B         200
5         B         500

对于每个类别,我想找到导致该类别的 sum(value) 低于 0 的第一条记录(按顺序排序)。

我目前的解决方案是(SQL函数伪代码):

create function find_low_value(in_category) returns int
begin
  declare cursor select sequence, value from table where category = in_category;
  declare sum int default 0;

  open and fetch cursor;
  set sum = sum + value;
  if sum <= 0 then
    return sequence;
  end if;
end

但是效率不高。是否有更好/更简单的解决方案?

谢谢。

最佳答案

我不知道这算不算“更好/更简单”,但您可以将其编写为常规 SQL 查询:

SELECT MIN(sequence)
  FROM ( SELECT t1.sequence
           FROM table_name t1
           JOIN table_name t2
             ON t2.category = t1.category
            AND t2.sequence <= t1.sequence
          WHERE t1.category = ...
          GROUP
             BY t1.sequence
         HAVING SUM(t2.value) <= 0
       )
;

关于mysql - 查找导致 SUM 变为 0 的第一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18951810/

相关文章:

php - 如何为从数据库中获取的文件制作下载按钮?

sql - mysql:有没有办法做 "INSERT INTO"2 个表?

SQL Server 到 mySQL 转换器

java - 从 java 导入 MySQL DB 不起作用

python - Django - 过滤 prefetch_related 查询集

mysql - 在 mysql 中通过代码获取带有 min(price) 组的行的值

mysql - SQL 查询左连接问题

sql - 什么时候应该使用存储过程?

database - 为什么在手动建立与 wordpress 数据库的新连接后我无法访问我的 Rails 应用程序数据库?

database - CDN 提供私有(private)图片/视频