Sql 行数有限的SUM和GROUP BY
我只想对每个用户和每个用户组的最后两周进行总结 我的桌子: +----+------+--------+------+ | ID | User | Income | Week | +----+------+--------+------+ | 1 | John | 50 | 1 | +----+------+--------+------+ | 2 | John | 20 | 2 | +----+------+--------+------+ | 3 | John | 25 | 3 | +----+------+--------+------+ | 4 | John | 10 | 4 | +----+------+--------+------+ | 5 | Mike | 45 | 1 | +----+------+--------+------+ | 6 | Mike | 15 | 2 | +----+------+--------+------+ | 7 | Mike | 10 | 3 | +----+------+--------+------+ | 8 | Mike | 5 | 4 | +----+------+--------+------+ 预期结果: +------+--------+ | User | Income | +------+--------+ | John | 35 | +------+--------+ | Mike | 15 | +------+--------+ 如您所见,我为每个用户总结了第4周和第3周,因为这是最后两周Sql 行数有限的SUM和GROUP BY,sql,postgresql,Sql,Postgresql,我只想对每个用户和每个用户组的最后两周进行总结 我的桌子: +----+------+--------+------+ | ID | User | Income | Week | +----+------+--------+------+ | 1 | John | 50 | 1 | +----+------+--------+------+ | 2 | John | 20 | 2 | +----+------+--------+------+ | 3 | Joh
提前谢谢 您可以使用行号来为给定用户排序前两周。此后,您可以进行聚合。在postgresql中工作
Select user, sum(income)
from(
select user, income, row_number() over (partition by user order by week desc) rn
from your_table
)
where rn<3 group by user;
您可以使用行号来为给定用户排序前两周。此后,您可以进行聚合。在postgresql中工作
Select user, sum(income)
from(
select user, income, row_number() over (partition by user order by week desc) rn
from your_table
)
where rn<3 group by user;
MySql--
SELECT User,Sum(Income) as Income
FROM mytable
WHERE week > (SELECT MAX(week) FROM mytable) - 2
GROUP BY User
PostgreSQL--
SELECT "user",Sum(Income) as Income
FROM mytable
WHERE week > (SELECT MAX(week) FROM mytable) - 2
GROUP BY "user"
MySql--
SELECT User,Sum(Income) as Income
FROM mytable
WHERE week > (SELECT MAX(week) FROM mytable) - 2
GROUP BY User
PostgreSQL--
SELECT "user",Sum(Income) as Income
FROM mytable
WHERE week > (SELECT MAX(week) FROM mytable) - 2
GROUP BY "user"
如果您使用的是mysql,那么请根据用户分组并按周数降序给出行号。然后按用户查找收入组的总和,行号小于3
质疑
如果您使用的是mysql,那么请根据用户分组并按周数降序给出行号。然后按用户查找收入组的总和,行号小于3
质疑
假设您的表名为users,字段为user、income、week: 或
如果周数是动态的,则可能需要计算where子句值。假设您的表名为users,字段为user,income,week: 或
如果您的周数是动态的,那么您可能需要计算where子句的值。您是否尝试过,然后失败了?你的问题是什么?老兄,老实说,我不知道从哪里开始。我尝试了不同的分组和限制。我只是觉得我远远不能解决这个问题。你在用哪个数据库?您已经标记了mysql和postgresql。您是否尝试过,但失败了?你的问题是什么?老兄,老实说,我不知道从哪里开始。我尝试了不同的分组和限制。我只是觉得我远远不能解决这个问题。你在用哪个数据库?您已经标记了mysql和postgresql。工作起来很有魅力。谢谢工作起来很有魅力。谢谢这种方法的问题是,仅当用于排序的列包含数值时才有效。比如说,我需要使用字母列来排序,而不是按周数字排序。行数方法在任何情况下都有效。如果week是char,它在mysql中仍然有效。但是对于postgresql,您将不得不将Week作为整数。这种方法的问题是,只有当用于排序的列包含数值时,它才有效。比如说,我需要使用字母列来排序,而不是按周数字排序。行数方法在任何情况下都有效。如果week是char,它在mysql中仍然有效。但对于postgresql,您必须将Week转换为整数