Mysql SQL查询:在SUM()上联接
我正在尝试运行一个查询,对项的值求和,然后对该和的值进行联接 所以在下面的代码中,我想加入的是合同,但我不确定这是否可行Mysql SQL查询:在SUM()上联接,mysql,sql,Mysql,Sql,我正在尝试运行一个查询,对项的值求和,然后对该和的值进行联接 所以在下面的代码中,我想加入的是合同,但我不确定这是否可行 SELECT `items_value`.`ContractId` as `Contract`, `items_value`.`site` as `SiteID`, SUM(`items_value`.`value`) as `Contract_For`, `contractitemlists`.`Text` as `Contracted_Text` FROM items_v
SELECT `items_value`.`ContractId` as `Contract`,
`items_value`.`site` as `SiteID`,
SUM(`items_value`.`value`) as `Contract_For`,
`contractitemlists`.`Text` as `Contracted_Text`
FROM items_value
LEFT JOIN contractitemlists ON (`items_value`.`Contract_For`) = `contractitemlists`.`Ref`;
WHERE `items_value`.`ContractID`='2';
当我在过去遇到类似的问题时,我只是创建了一个保存总和的视图,然后在另一个视图中加入该视图
目前,上面的示例仅适用于一个伪值,但它是一个存储过程,用户可以在其中选择压缩。我现在遇到的错误是“未知列
项目\u值”
合同\u For
除了HAVING and ORDER BY*,您不能在任何地方使用别名或使用SELECT子句中的表达式进行聚合;您需要使第一个“部分”成为子查询,然后连接到该子查询
它可能更容易理解,虽然有点过于简单,也不完全正确,但如果你按照评估的顺序来看待它
- FROM(注意:联接仅在FROM内)
- 在哪里
- 分组
- 挑选
- 拥有
- 订购人
您的查询需要如下所示:
SELECT s.*
, `cil`.`Text` as `Contracted_Text`
FROM (
SELECT `iv`.`ContractId` as `Contract`
, `iv`.`site` as `SiteID`
, SUM(`iv`.`value`) as `Contract_For`
FROM items_value AS iv
WHERE `iv`.`ContractID`='2'
) AS s
LEFT JOIN contractitemlists AS cil ON `s`.`Contract_For` = cil.`Ref`
;
但正如其他人所提到的,缺少一个团队是需要研究的;如“如果有多个站点值,该怎么办?”您不能在任何地方使用SELECT子句中的表达式来使用别名或聚合,只能使用and ORDER BY*;您需要使第一个“部分”成为子查询,然后连接到该子查询 它可能更容易理解,虽然有点过于简单,也不完全正确,但如果你按照评估的顺序来看待它
- FROM(注意:联接仅在FROM内)
- 在哪里
- 分组
- 挑选
- 拥有
- 订购人
您的查询需要如下所示:
SELECT s.*
, `cil`.`Text` as `Contracted_Text`
FROM (
SELECT `iv`.`ContractId` as `Contract`
, `iv`.`site` as `SiteID`
, SUM(`iv`.`value`) as `Contract_For`
FROM items_value AS iv
WHERE `iv`.`ContractID`='2'
) AS s
LEFT JOIN contractitemlists AS cil ON `s`.`Contract_For` = cil.`Ref`
;
但正如其他人所提到的,缺少一个团队是需要研究的;如“如果有多个站点值会怎样?”倒数第二行的分号看起来不太好。没有GROUPBY子句的聚合函数有点奇怪(但并非不可能),倒数第二行的分号看起来不太好。没有GROUPBY子句的聚合函数有点奇怪(但并非不可能),这不是计算顺序!这是查询中作用域标识符使用的顺序。理解作用域和执行之间的区别是非常非常重要的。@GordonLinoff编辑的目的是让我“有点像这样,但不完全是这样”的意图更加明显;我以为我已经用“引擎盖下”部分很好地覆盖了它,但显然没有。@Uuerdo非常感谢,我会看看我能做些什么。在这种情况下,每个契约都是针对一个站点的,所以它们在parityYeah中应该是1:1,如果它们是1:1,那就不是一个真正的问题(除了较新的MySQL版本上的默认配置在GROUP BY requirements中稍微严格一点)。这不是评估的顺序!这是查询中作用域标识符使用的顺序。理解作用域和执行之间的区别是非常非常重要的。@GordonLinoff编辑的目的是让我“有点像这样,但不完全是这样”的意图更加明显;我以为我已经用“引擎盖下”部分很好地覆盖了它,但显然没有。@Uuerdo非常感谢,我会看看我能做些什么。在这种情况下,每个契约都是针对一个站点的,所以它们在parityYeah中应该是1:1,如果它们是1:1,那么这实际上不是一个问题(除了较新的MySQL版本上的默认配置在GROUP BY需求中稍微严格一点)。