sql查询:加入sum()

cwxwcias  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(368)

我正在尝试运行一个查询,对项的值求和,然后对该和的值进行联接。
所以在下面的代码中,合同是我想要加入的,但是我不确定这是否可行。

  1. SELECT `items_value`.`ContractId` as `Contract`,
  2. `items_value`.`site` as `SiteID`,
  3. SUM(`items_value`.`value`) as `Contract_For`,
  4. `contractitemlists`.`Text` as `Contracted_Text`
  5. FROM items_value
  6. LEFT JOIN contractitemlists ON (`items_value`.`Contract_For`) = `contractitemlists`.`Ref`;
  7. WHERE `items_value`.`ContractID`='2';

当我在过去遇到类似的问题时,我只是创建了一个保存总和的视图,然后在另一个视图中加入该视图。
目前,上面的示例仅适用于一个伪值,但它是一个存储过程,用户在其中选择constract。我现在得到的错误是“未知列” items_value . Contract_For

368yc8dk

368yc8dk1#

您不能在任何地方使用别名或使用select子句中的表达式进行聚合,但必须使用and order by*;您需要使第一个“部分”成为子查询,然后连接到该子查询。
它可能更容易理解,虽然有点过于简单化和不完全正确,如果你从这个Angular 看它的评价顺序去。。。
from(注意:join仅在from中)
哪里
分组依据
选择

订货人
在实际实现中,大多数sql实现实际上使用每个部分的信息来优化其他部分(比如使用一些where条件来减少在from中加入的记录);但这是必须遵守的概念秩序。

  • 在mssql的某些版本中,不能使用“在having中选择”或“按order”中的别名。

您的查询需要如下所示:

  1. SELECT s.*
  2. , `cil`.`Text` as `Contracted_Text`
  3. FROM (
  4. SELECT `iv`.`ContractId` as `Contract`
  5. , `iv`.`site` as `SiteID`
  6. , SUM(`iv`.`value`) as `Contract_For`
  7. FROM items_value AS iv
  8. WHERE `iv`.`ContractID`='2'
  9. ) AS s
  10. LEFT JOIN contractitemlists AS cil ON `s`.`Contract_For` = cil.`Ref`
  11. ;

但正如其他人所提到的,缺少一个小组是需要研究的;如“如果有多个站点值怎么办”

展开查看全部

相关问题