Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用mysql select查询获取下一行列的后续总计_Mysql_Sql_Mariadb_Sql Query Store - Fatal编程技术网

如何使用mysql select查询获取下一行列的后续总计

如何使用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

我正在为股票条目创建一个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      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;