MySQL 中的累积列限制
Limit On Accumulated Column in MySQL
我正在尝试寻找一种优雅的方式来编写查询,该查询仅 returns 足够的行供特定列加起来至少 n。
例如,假设 n 为 50,table 行如下所示:
id count
1 12
2 13
3 5
4 18
5 14
6 21
7 13
那么查询应该return:
id count
1 12
2 13
3 5
4 18
5 14
因为计数列加起来 n > 50。(准确地说是 62)
必须return结果从最小的id开始连续
我研究了一些累加器,比如这个:MySQL select "accumulated" column
但是 AFAIK,没有办法在 SUM 的 SQL 查询限制中使用 LIMIT 子句而不是行计数。
我希望我可以这样说,但是唉,这是无效的SQL:
SELECT *
FROM elements
LIMIT sum(count) > 50
此外,请记住我的目标是将此查询的结果以自动化、高效的方式自动插入到另一个 table 中,因此请不要建议使用电子表格或任何不是SQL 兼容。
谢谢
有很多方法可以做到这一点。一种是使用 Correlated Subquery
SELECT id,
count
FROM (SELECT *,
(SELECT Isnull(Sum(count), 0)
FROM yourtable b
WHERE b.id < a.id) AS Run_tot
FROM yourtable a) ou
WHERE Run_tot < 50
我正在尝试寻找一种优雅的方式来编写查询,该查询仅 returns 足够的行供特定列加起来至少 n。
例如,假设 n 为 50,table 行如下所示:
id count
1 12
2 13
3 5
4 18
5 14
6 21
7 13
那么查询应该return:
id count
1 12
2 13
3 5
4 18
5 14
因为计数列加起来 n > 50。(准确地说是 62)
必须return结果从最小的id开始连续
我研究了一些累加器,比如这个:MySQL select "accumulated" column
但是 AFAIK,没有办法在 SUM 的 SQL 查询限制中使用 LIMIT 子句而不是行计数。
我希望我可以这样说,但是唉,这是无效的SQL:
SELECT *
FROM elements
LIMIT sum(count) > 50
此外,请记住我的目标是将此查询的结果以自动化、高效的方式自动插入到另一个 table 中,因此请不要建议使用电子表格或任何不是SQL 兼容。
谢谢
有很多方法可以做到这一点。一种是使用 Correlated Subquery
SELECT id,
count
FROM (SELECT *,
(SELECT Isnull(Sum(count), 0)
FROM yourtable b
WHERE b.id < a.id) AS Run_tot
FROM yourtable a) ou
WHERE Run_tot < 50