Mysql 如何求两个字段的和
我正在尝试执行算术运算符,这是我的查询Mysql 如何求两个字段的和,mysql,sql,oracle,Mysql,Sql,Oracle,我正在尝试执行算术运算符,这是我的查询 SELECT GLB.BEGIN_BALANCE_DR_BEQ + GLB.BEGIN_BALANCE_CR_BEQ AS ACTIVITY, GLB.PERIOD_NET_DR + GLB.PERIOD_NET_CR AS BEG_BALANCE , ACTIVITY + BEG_BALANCE AS END_BALANCE, SUM(ACTIVITY) AS TOTAL_ACT, SUM(BEG_BALANCE
SELECT
GLB.BEGIN_BALANCE_DR_BEQ + GLB.BEGIN_BALANCE_CR_BEQ AS ACTIVITY,
GLB.PERIOD_NET_DR + GLB.PERIOD_NET_CR AS BEG_BALANCE ,
ACTIVITY + BEG_BALANCE AS END_BALANCE,
SUM(ACTIVITY) AS TOTAL_ACT,
SUM(BEG_BALANCE) AS TOTAL_BEG_BALANCE,
SUM(END_BALANCE) AS TOTAL_END_BALANCE,
但它不起作用,有人能指导我怎么修复它吗 在您的情况下,您不能在同一选择级别中使用别名(如果没有适当的分组依据,您也不能使用聚合级别和未聚合列) 应使用子查询快速使用别名,例如:
SELECT
SUM(ACTIVITY) AS TOTAL_ACT,
SUM(BEG_BALANCE) AS TOTAL_BEG_BALANCE,
SUM(END_BALANCE) AS TOTAL_END_BALANCE
FROM(
SELECT
GLB.BEGIN_BALANCE_DR_BEQ + GLB.BEGIN_BALANCE_CR_BEQ AS ACTIVITY,
GLB.PERIOD_NET_DR + GLB.PERIOD_NET_CR AS BEG_BALANCE ,
ACTIVITY + BEG_BALANCE AS END_BALANCE
FROM My_TABLE
) T
在您的情况下,您不能在同一选择级别中使用别名(如果没有适当的分组依据,您也不能使用聚合级别和未聚合列) 应使用子查询快速使用别名,例如:
SELECT
SUM(ACTIVITY) AS TOTAL_ACT,
SUM(BEG_BALANCE) AS TOTAL_BEG_BALANCE,
SUM(END_BALANCE) AS TOTAL_END_BALANCE
FROM(
SELECT
GLB.BEGIN_BALANCE_DR_BEQ + GLB.BEGIN_BALANCE_CR_BEQ AS ACTIVITY,
GLB.PERIOD_NET_DR + GLB.PERIOD_NET_CR AS BEG_BALANCE ,
ACTIVITY + BEG_BALANCE AS END_BALANCE
FROM My_TABLE
) T
此查询中混合了两种类型的操作。前三行是单行操作,后三行是多行操作。如文所述,您要求为每行提供
GLB.BEGIN\u BALANCE\u DR\u BEQ+GLB.BEGIN\u BALANCE\u CR\u BEQ As ACTIVITY
的值,以及所有行中ACTIVITY
的总和
如果需要所有行中每个字段的总和,则必须将每个调用包装在
sum(…)
函数中。如果要混合使用单行和多行字段,则必须将它们拆分为两个查询。此查询中混合了两种类型的操作。前三行是单行操作,后三行是多行操作。如文所述,您要求为每行提供GLB.BEGIN\u BALANCE\u DR\u BEQ+GLB.BEGIN\u BALANCE\u CR\u BEQ As ACTIVITY
的值,以及所有行中ACTIVITY
的总和
如果需要所有行中每个字段的总和,则必须将每个调用包装在
sum(…)
函数中。如果要混合使用单行和多行字段,则必须将它们拆分为两个查询。在查询的SELECT列表中指定的别名在SELECT列表的其他位置或同一查询的WHERE子句中引用无效。(MySQL确实有扩展,允许按顺序引用列别名,并具有。)
如果要引用选择列表中的别名,一个选项是将查询放入内联视图。外部查询可以引用别名作为列名。作为一个简单的例子
SELECT c.myalias
, c.fee
, c.myalias + c.fee AS grand_tot
FROM ( SELECT t.somecol + t.othercol AS `myalias`
, t.fi + t.fo + t.fum AS `fee`
FROM t
) c
出于性能方面的原因,我们通常会避免这样做,因为将内联视图具体化为派生表的成本很高。避免内联视图和可用的引用列会更有效,即使我们必须重复表达式
SELECT t.somecol + t.othercol AS `myalias`
, t.fi + t.fo + t.fum AS `fee`
, t.somecol + t.othercol + t.fi + t.fo + t.fum AS `grand_tot`
FROM t
还不清楚我们需要返回什么结果集 如果我们只需要总计,我会避免使用内联视图,而只是咬紧牙关,使用引用选择列表中可用列的表达式。返回的结果集似乎很奇怪:
SELECT SUM( GLB.BEGIN_BALANCE_DR_BEQ
+ GLB.BEGIN_BALANCE_CR_BEQ
) AS TOTAL_ACT
, SUM( GLB.PERIOD_NET_DR
+ GLB.PERIOD_NET_CR
) AS TOTAL_BEG_BALANCE
, SUM( GLB_GLB.BEGIN_BALANCE_DR_BEQ
+ GLB.BEGIN_BALANCE_CR_BEQ
+ GLB.PERIOD_NET_DR
+ GLB.PERIOD_NET_CR
) AS TOTAL_END_BALANCE
FROM ...
在查询的SELECT列表中指定的别名在SELECT列表的其他位置或同一查询的WHERE子句中引用时无效。(MySQL确实有扩展,允许按顺序引用列别名,并具有。) 如果要引用选择列表中的别名,一个选项是将查询放入内联视图。外部查询可以引用别名作为列名。作为一个简单的例子
SELECT c.myalias
, c.fee
, c.myalias + c.fee AS grand_tot
FROM ( SELECT t.somecol + t.othercol AS `myalias`
, t.fi + t.fo + t.fum AS `fee`
FROM t
) c
出于性能方面的原因,我们通常会避免这样做,因为将内联视图具体化为派生表的成本很高。避免内联视图和可用的引用列会更有效,即使我们必须重复表达式
SELECT t.somecol + t.othercol AS `myalias`
, t.fi + t.fo + t.fum AS `fee`
, t.somecol + t.othercol + t.fi + t.fo + t.fum AS `grand_tot`
FROM t
还不清楚我们需要返回什么结果集 如果我们只需要总计,我会避免使用内联视图,而只是咬紧牙关,使用引用选择列表中可用列的表达式。返回的结果集似乎很奇怪:
SELECT SUM( GLB.BEGIN_BALANCE_DR_BEQ
+ GLB.BEGIN_BALANCE_CR_BEQ
) AS TOTAL_ACT
, SUM( GLB.PERIOD_NET_DR
+ GLB.PERIOD_NET_CR
) AS TOTAL_BEG_BALANCE
, SUM( GLB_GLB.BEGIN_BALANCE_DR_BEQ
+ GLB.BEGIN_BALANCE_CR_BEQ
+ GLB.PERIOD_NET_DR
+ GLB.PERIOD_NET_CR
) AS TOTAL_END_BALANCE
FROM ...
这只是问题的一半。。。其余的看起来怎么样?请正确标记。要么是MySQL,要么是Oracle,不能两者兼而有之。而且你发布的查询肯定不起作用。这只是查询的一半。。。其余的看起来怎么样?请正确标记。它是MySQL或Oracle,不能两者都是。而且你发布的查询肯定不会起作用。我认为在分配别名的查询的选择列表中不能引用
ACTIVITY
和BEG\u BALANCE
。如果我们想从内联视图返回END\u BALANCE
,我们需要使用引用选择列表中可用列的表达式。在这种情况下,我不认为我们真的需要返回END\u BALANCE
,我们可以使用SUM(ACTIVITY+BEG\u BALANCE)
来代替外部查询中的SUM(END\u BALANCE)
。我不认为ACTIVITY
和BEG\u BALANCE
可以在分配这些别名的查询的选择列表中引用。如果我们想从内联视图返回END\u BALANCE
,我们需要使用引用选择列表中可用列的表达式。在这种情况下,我认为我们真的不需要返回END\u BALANCE
,我们可以使用SUM(ACTIVITY+BEG\u BALANCE)
代替外部查询中的SUM(END\u BALANCE)
。