求和 SQL PLUS 函数

Posted

技术标签:

【中文标题】求和 SQL PLUS 函数【英文标题】:Sum SQL PLUS function 【发布时间】:2016-02-23 23:30:52 【问题描述】:

我正在尝试添加多行以将它们组合成按文章编号和订购数量排列的较小行

假设我有这样的东西

LigneCommande

|noArticle|quantity
|10       |100  
|10       |0  
|10       |0  
|20       |20    
|20       |20  
|20       |20

文章

|noArticle|Description
|10       |potato
|20       |banana
|30       |ham

预期结果:

|noArticle|totalquantity
|10       |100  
|20       |60    

我的结果:

|noArticle|totalquantity
|10       |160 
|20       |160    

最后 1 想要 2 行,其中 1 是商品编号,2 是总数量,所以应该是 10 ; 100 和 20 ;60

现在我有这样的东西

SELECT Article.noArticle, SUM (quantity) AS TOTALQUANTITY
FROM LigneCommande, Article
GROUP BY  Article.noArticle
ORDER BY Article.noArticle

问题是它对所有数量求和并以 20;160 和 10;160 结尾

我可能遗漏了一个 OVER 函数或者有些东西无法弄明白

编辑:好吧,让我澄清一下,我有 2 个表,其中一个在这个名为 LigneCommande 的表中有文章编号和数量,只有数量高于 0 的文章才会出现。我有另一个名为 Article 的表,即使没有数量,它也有所有的货号。最后,我想要 Article 中的所有文章编号和 Ligne 命令中的所有数量,将这两个组合在一起的键是 noArticle(如果我不清楚,英语不是我的第一语言对不起)

【问题讨论】:

您真的打算在 LigneCommande 表和 Article 表之间进行笛卡尔连接吗?这似乎极不可能。您是在向我们展示Article 表中的数据吗?如果是这样,你为什么要加入LigneCommande 【参考方案1】:

您可以尝试在 group by 子句中使用rollup modifier:

SELECT Article.noArticle, SUM (quantity) AS TOTALQUANTITY
FROM Article
LEFT JOIN LigneCommande ON Article.noArticle=LigneCommande.noArticle
GROUP BY ROLLUP( Article.noArticle)

您可以在having子句中过滤掉总和。

【讨论】:

似乎工作得很好你能解释一下 LEFT JOIN 命令吗? 左连接不是命令,它是选择语句的一部分。本质上,它从表达式左侧的表中获取所有记录,并从右侧表中获取匹配数据。如果您想了解更多信息,请 Google 离开加入。【参考方案2】:

我认为您的 sql 中的错误是您还在查询中包含了 LigneCommande 表,这似乎没用。试试:

SELECT Article.noArticle, SUM (quantity) AS TOTALQUANTITY
FROM Article
GROUP BY  Article.noArticle
ORDER BY Article.noArticle

以上假设数量是 Article 表中的一列。如果不是这种情况(并且 LigneCommande 有数量),那么您需要将其相应地加入您的架构(例如可能类似于以下内容)

SELECT a.noArticle, SUM (l.quantity) AS TOTALQUANTITY
FROM Article a 
Join LigneCommande l on l.noArticle = a.noArticle
GROUP BY  a.noArticle
ORDER BY a.noArticle

【讨论】:

以上是关于求和 SQL PLUS 函数的主要内容,如果未能解决你的问题,请参考以下文章

sql实现多字段求和并查询

如何在 sql 的循环中对函数求和?

sql语句求和

对两个不同查询 (SQL) 的结果求和

在 Oracle SQL 中求和逗号分隔值

关于sqlserver分组求和的问题