【问题标题】:Query to get all records until the sum of column less than or equal a value查询以获取所有记录,直到列的总和小于或等于一个值
【发布时间】:2014-03-16 11:19:21
【问题描述】:

我想获取一个表中的所有记录,直到特定列的总和小于或等于'n'。

例如:

表格:数据

slno 商品价格 1 件1 1000 2 项目2 2000 3 项目3 3000 4 项4 4000 5 项5 5000 6 项6 6000

我想从上表中获取所有记录,直到总和(价格)小于或等于 10000

因此,使用上表,我的结果将是前 4 条记录。

【问题讨论】:

标签: mysql sql


【解决方案1】:

你可以的

SELECT slno, item, price
  FROM
(
  SELECT slno, item, price, @t := @t + price total
    FROM table1 CROSS JOIN (SELECT @t := 0) i
   ORDER BY slno
) q
 WHERE total <= 10000

SELECT slno, item, price
  FROM
(
  SELECT slno, item, price, 
  (
    SELECT SUM(price)
      FROM table1
     WHERE slno <= t.slno
  ) total
    FROM table1 t
) q
 WHERE total <= 10000
 ORDER BY slno

这里是SQLFiddle演示

【讨论】:

  • 感谢您的询问。这符合我的期望,但是由于我的表有大量数据,因此执行需要很长时间。你能给我一个性能更好的优化查询吗
  • 您能否给我一个性能更好的优化查询,因为我使用的表数据量很大,所以上述查询需要更多时间来执行。
  • 这两个查询都需要全表扫描。因此,为了提高性能要做的一件事是限制源行的数量,例如通过引入带有slno(或其他列)范围的WHERE子句,如WHERE slno BETWEEN 1 AND 10WHERE slno &lt; 5000...
猜你喜欢
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
  • 2021-12-17
  • 2023-02-23
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
相关资源
最近更新 更多