如何使用mysql获得如下结果?
> +--------+------+------------+
> | code | qty | total |
> +--------+------+------------+
> | aaa | 30 | 75 |
> | bbb | 20 | 45 |
> | ccc | 25 | 25 |
> +--------+------+------------+
总计是行的值以及之后的其他行。
答案 0 :(得分:3)
您可以使用相关子查询执行此操作 - 假设排序是按字母顺序排列的:
select code, qty,
(select sum(t2.qty)
from mytable t2
where t2.code >= t.code
) as total
from mytable t;
SQL表表示无序集。因此,表本身并没有后续行的概念。在您的示例中,代码是按字母顺序排列的,因此它们提供了一个定义。在实践中,通常会有一个id或创建日期用于此目的。
答案 1 :(得分:2)
我会使用join,imho通常更适合。
数据:
create table tab (
code varchar(10),
qty int
);
insert into tab (code, qty)
select * from (
select 'aaa' as code, 30 as qty union
select 'bbb', 20 union
select 'ccc', 25
) t
查询:
select t.code, t.qty, sum(t1.qty) as total
from tab t
join tab t1 on t.code <= t1.code
group by t.code, t.qty
order by t.code
最好的方法是尝试两个查询(我和@Gordon提到的子查询)并选择更快的查询。
答案 2 :(得分:0)
考虑使用变量。它看起来像:
select code, qty, (@total := ifnull(@total, 0) + qty) as total
from your_table
order by code desc
...然后反向查询结果列表。
如果您需要纯SQL解决方案,您可以计算所有qty
值的总和并将其存储在变量中。