【问题标题】:Mysql select top n rows whilte count x<yMysql 在计数 x<y 时选择前 n 行
【发布时间】:2013-11-22 22:07:09
【问题描述】:

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

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

让我们说y=15,所以在这种情况下,我想要SUM(itemCount)&lt;=15 的前两行 我需要这样的东西:

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

这可能吗?

更新:

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

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

【问题讨论】:

  • 我无法理解这个问题。您可以用文字表达您的要求,而不是指定查询。您希望 SUM 清楚地表明您想按什么参数进行分组?
  • 您在寻找having (sum) &lt;= 15吗?

标签: mysql select count while-loop


【解决方案1】:

是的,它是:

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;

【讨论】:

    猜你喜欢
    • 2018-12-13
    • 2013-10-10
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 2015-11-04
    • 2012-04-07
    • 2018-01-03
    • 1970-01-01
    相关资源
    最近更新 更多