首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL视图中的左联接问题.按组

问MySQL视图中的左联接问题.按组
EN

Stack Overflow用户
提问于 2020-03-28 17:58:59
回答 2查看 59关注 0票数 0

我在MySQL中有这样一个查询:

代码语言:javascript
复制
SELECT
a.IdFactura,
(sum((a.Precio_sinIVA*a.Cantidad)-(a.Descuento/(1+a.IVA_Tipo)))) AS SUM,
(1-((b.Descuento_Cliente * 1.0)/100.00)) As DESCUENT,
(sum((a.Precio_sinIVA*a.Cantidad)-(a.Descuento/(1+a.IVA_Tipo)))) * (1-((b.Descuento_Cliente * 1.0)/100.00)) As Base_Imponible
FROM Lineas_Facturas a
LEFT JOIN Facturas b ON a.IdFactura = b.IdFactura
GROUP BY a.IdFactura

然后查询返回,例如:

代码语言:javascript
复制
a.IdFactura   SUM    DESCUENT   Base_Imponible
655           29.75  0.9        26.77 (OK)

但是,当我将此查询包含到视图中并运行它时,视图将返回,例如:

代码语言:javascript
复制
a.IdFactura   SUM    DESCUENT   Base_Imponible
655           29.75  0.9        29.65 (WRONG)

我只想乘以SUM * DESCUENT,在查询中结果是可以的,但是当我将它包含到视图中时,结果就不同了。

问题出在哪里?有人能帮我吗?

更新:

我仔细地检查了MySQL视图和SQL,当我保存视图时,查询的括号更改了,有些被删除了。保存在视图中的查询如下:

代码语言:javascript
复制
SELECT
a.IdFactura,
sum(a.Precio_sinIVA*a.Cantidad-a.Descuento/(1+a.IVA_Tipo)) AS SUM,
1-b.Descuento_Cliente * 1.0/100.00 As DESCUENT,
sum(a.Precio_sinIVA*a.Cantidad-a.Descuento/(1+a.IVA_Tipo)) * 1-b.Descuento_Cliente * 1.0/100.00 As Base_Imponible
FROM Lineas_Facturas a
LEFT JOIN Facturas b ON a.IdFactura = b.IdFactura
GROUP BY a.IdFactura

我已经检查了查询代码,除了2(字段开头和结尾处的括号)之外,DESCUENT字段中的所有家长都可以:

代码语言:javascript
复制
(1-b.Descuento_Cliente * 1.0/100.00) As DESCUENT,

如果没有这两个括号,“Base_Imponible”字段中的所有计算都是不正确的。有什么主意吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-28 19:40:57

我已经用CTE解决了这个问题。SQL视图是:

代码语言:javascript
复制
WITH cte AS (
SELECT 
    Lineas_Facturas.IdFactura AS IdFactura,
    (sum(Precio_sinIVA*Cantidad-Descuento/(1+IVA_Tipo))) AS SUMA, 
    (1-Facturas.Descuento_Cliente * 1.0/100.00) AS DISCOUNT 
from Lineas_Facturas
LEft Join Facturas ON Lineas_Facturas.IdFactura = Facturas.IdFactura
GROUP BY Lineas_Facturas.IdFactura
)
SELECT IdFactura, (SUMA*DISCOUNT) AS Base_Imponible
FROM cte

非常感谢。

瓦迪安

票数 0
EN

Stack Overflow用户

发布于 2020-03-29 11:23:22

当将普通列与聚合函数混合时,必须使用GROUP BY。GROUP BY应该包含来自SELECT的普通列。

您的a.IdFactura和b.Descuento_Cliente列不在聚合函数中,因此您应该将这些列包含在GROUP BY中。在默认情况下,较早的MySQL版本允许这样做,您可能会将变量结果视为结果(与括号无关)。

要查看查询是否正确,可以显示一些示例代码和所需的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60904771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档