如何使用mysql select查询获取下一行列的后续总计
我正在为股票条目创建一个SQL查询。在最后一列中,我需要上一次购买股票的总数如何使用mysql select查询获取下一行列的后续总计,mysql,sql,mariadb,sql-query-store,Mysql,Sql,Mariadb,Sql Query Store,我正在为股票条目创建一个SQL查询。在最后一列中,我需要上一次购买股票的总数 S No Product Code Qty Qty Total 1 PO1 5 5 2 PO1 12 17 3 PO1 10 27 4 PO1 8 35 5 PO1 9
S No Product Code Qty Qty Total
1 PO1 5 5
2 PO1 12 17
3 PO1 10 27
4 PO1 8 35
5 PO1 9 44
6 PO1 16 60
在最后一列的每一行中,我都添加了前面的所有数量,例如1号数量是5。在S 2中,我添加了数量5和12=17。我加上5+12+10=27,然后继续
如果这是一个重复的问题,我很抱歉。我搜索了google和StackOverflow,但没有得到答案。我是MySQL新手
我在下面添加了疑问。我是SQL新手,非常感谢您的帮助
提前谢谢
CREATE TABLE `stock_table` (
`ID` int(11) NOT NULL,
`product_code` varchar(20) NOT NULL,
`qty` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `stock_table` (`ID`, `product_code`, `qty`) VALUES
(1, 'PO1', 5),
(2, 'PO1', 12),
(3, 'PO1', 10),
(4, 'PO1', 8),
(5, 'PO1', 9),
(6, 'PO1', 16);
你需要一笔流水账。如果您使用的是MySQL v 8.0,则可以使用SUM窗口函数-
SELECT `ID`,
`product_code`,
`qty`,
SUM(`qty`) OVER (PARTITION BY `product_code` ORDER BY `ID`) Qty_Total
FROM `stock_table`;
通过增加ID值,可以使用相关子查询在行继续时汇总所需的列:
您的MariaDB版本不支持窗口功能。这就给你留下了两个选择。一个是相关子查询;第二个是变量 第一个更容易实现:
select st.*,
(select sum(st2.qty)
from stock_table st2
where st2.product_code = st.product_code and
st2.id <= st.id
) as running_qty
from stock_table st;
为了提高性能,您需要一个关于库存产品代码、id、数量的索引。您的MySQL服务器版本是什么?不要选择版本;并将此查询的结果报告到问题中。更多答案可能重复,请访问:andI used select version:output是10.1.34-MariaDB,我使用的是xampThanks,Bro,它在MySQL 8中工作,但我使用的是xamp,在它中,它不工作。。非常感谢您的回答。1064-您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,了解使用第4行“按产品分区\u代码按ID从库存订购\u表格限制0,25”的正确语法。首先,它表示数量\u总计的意外标记。您似乎正在使用不支持窗口功能的MariaDB。尝试BarbarosÖzhan的答案。当我删除数量总数时,它显示上面的错误1064
( select sum(`qty`)
from `stock_table`
where `ID` <= t.`ID`
and `product_code` = t.`product_code` ) as "Qty Total"
select st.*,
(select sum(st2.qty)
from stock_table st2
where st2.product_code = st.product_code and
st2.id <= st.id
) as running_qty
from stock_table st;