Mysql 选择前 n 行 whilte 计数 x<y

标签 mysql select count while-loop

我有一个表,其中有一列名为 itemCount我想在 SUM(itemCount) 时选择前 n 行小于 y .

+----+-----------+
| id | itemCount |
+----+-----------+
|  1 |         5 |
|  2 |        10 |
|  3 |         1 |
|  4 |        20 |
+----+-----------+

假设y=15所以在这种情况下,我想要前 2 行,其中 SUM(itemCount)<=15 我需要这样的东西:

SELECT * FROM `tbl_mail_queue` LIMIT 0,(select count(id) from `tbl_mail_queue` m where SUM(m.`count`)<=15)

这可能吗?

更新:

我正在创建一个电子邮件队列系统,我的系统发送的每封电子邮件都存储在这个表中。每封电子邮件可以有多个收件人,我不想将它们分解为每个电子邮件行 1 个收件人(其中一个发送电子邮件的模块是时事通讯,每封邮件可以有数十个甚至数百个收件人,我只将它们分成 50 个收件人堆栈)所以在我的电子邮件表中,我有一列告诉我该电子邮件有多少收件人。

所以每一行的计数列可以有一个从 1 到 50 的值,现在我想每隔几分钟发送 50 封电子邮件,这里是我需要这个查询来选择前 50 封电子邮件的地方,它可以包含在 1 或更多(n ) 行。

最佳答案

是的,它是:

SELECT 
   test.id,
   test.itemCount 
FROM 
   test 
     LEFT JOIN 
       (SELECT 
         id, 
         @sum:=@sum+itemCount AS current_sum 
        FROM 
          test 
          CROSS JOIN(SELECT @sum:=0) AS init) AS sums 
     ON test.id=sums.id 
WHERE sums.current_sum<=15;

关于Mysql 选择前 n 行 whilte 计数 x<y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19900710/

相关文章:

mysql - 亚马逊 RDS : can databases be setup in replicaton mode?

mysql - 创建数据库桌面应用程序的正确方法是什么?

t-sql - 如何选择一个表中的所有行以及另一表中的任何匹配项(如果存在)?

java - 如何统计数组列表中单词的重复次数?

mysql - 分组、计数和位置

javascript - jQuery 在 for 循环中动态增加变量名

php - 需要有关显示记录的帮助

php - 使用mysql或php的特定行 View

mysql - 如何使用包含子查询的 mysql 查询编写循环 bash 脚本?

sql - postgresql - 加入匹配的表以及不匹配的表?