Mysql 列的总和
如何获得所有列的总和?假设我有一张像下面这样的桌子。我的查询得到总成本和净回报。如何在不编写第二个查询的情况下计算“总计”总和Mysql 列的总和,mysql,sql,Mysql,Sql,如何获得所有列的总和?假设我有一张像下面这样的桌子。我的查询得到总成本和净回报。如何在不编写第二个查询的情况下计算“总计”总和 Date rate supplyfee demandfee chargedfee othersTotalcosts netReturn 2010-01-10 1,339.00 2,150.00 10,000.00 120,000.00 1,085.78 1,064.22 201
Date rate supplyfee demandfee chargedfee othersTotalcosts netReturn
2010-01-10 1,339.00 2,150.00 10,000.00 120,000.00 1,085.78 1,064.22
2011-01-01 3,339.00 1,150.00 1,100.00 150,000.00 1,144.13 5.87
*Total* 3,300.00 2,100.00
总成本通过sum(chargedfee+其他)/rate+demandfee计算,净回报通过supplyfee-总成本计算
下面的查询计算总成本:
SELECT date
, rate
, supply_fee
, demand_fee
, charged_fee
, (charged + others/rate) + demandfee AS totalcosts
, supplyfee-((charged + others/rate) + demandfee AS net returns
FROM financies
WHERE date BETWEEN '2010-01-10' AND '2011-01-01'
将其包装并添加另一列,类似于以下内容:
select date, rate, supply_fee, demand_fee, charged_fee, totalcosts, net_returns,
(totalcosts+net_returns+supply_fee) as grandtotal
from(
select date, rate, supply_fee, demand_fee, charged_fee,
(charged + others/rate) + demandfee as totalcosts,
supplyfee-((charged + others/rate) + demandfee as net_returns
from finances
where date between '2010-01-10' AND '2011-01-01')
您可以与GROUP BY
子句一起使用来汇总列,例如:
select IFNULL(date, "Total") date, IFNULL(rate, "") rate,
supply_fee, demand_fee, charged_fee,
(charged + others/rate) + demandfee as totalcosts,
supplyfee-((charged + others/rate) + demandfee as net returns
from financies
Group by date, rate WITH ROLLUP
Having date between '2010-01-10' AND '2011-01-01'
这看起来很复杂,但请容忍我。它需要澄清什么是其他人/费率
,但原则是合理的。如果你有一个可以使用的财务主键,那么一个更优雅的(分组汇总)解决方案可能是可行的,但是我没有足够的经验来提供可靠的建议。我将如何解决这个问题
冗长的选项
(
SELECT
financesTallied.date,
financesTallied.rate,
financesTallied.supply_fee,
financesTallied.demand_fee,
financesTallied.charged_fee,
financesTallied.total_costs,
financesTallied.net_return
FROM (
SELECT
financeWithNetReturn.*,
@supplyFee := @supplyFee + financeWithNetReturn.supply_fee,
@demandFee := @demandFee + financeWithNetReturn.demand_fee,
@charedFee := @charedFee + financeWithNetReturn.charged_fee
FROM
( // Calculate net return based off total costs
SELECT
financeData.*,
financeData.supply_fee - financeData.total_costs AS net_return
FROM
( // Select the data
SELECT
date,
rate,
supply_fee,
demand_fee,
charged_fee,
(supply_fee+demand_fee+charged_fee)/rate AS total_costs // need clarification on others/rate
FROM financies
WHERE date BETWEEN '2010-01-10' AND '2011-01-01'
ORDER BY date ASC
) AS financeData
) AS financeWithNetReturn,
(
SELECT
@supplyFee := 0
@demandFee := 0
@charedFee := 0
) AS variableInit
) AS financesTallied
) UNION (
SELECT
'*Total*',
NULL,
@supplyFee,
@demandFee,
@chargedFee,
NULL,
NULL
)
从最里面的查询到最外面的查询。此查询选择基本费用并计算此行的总成本。这个总成本公式需要调整,因为我不是100%清楚你在寻找什么。将其称为[SQ1]
SELECT
date,
rate,
supply_fee,
demand_fee,
charged_fee,
(supply_fee+demand_fee+charged_fee)/rate AS total_costs // need clarification on others/rate
FROM financies
WHERE date BETWEEN '2010-01-10' AND '2011-01-01'
ORDER BY date ASC
SELECT
financeData.*,
financeData.supply_fee - financeData.total_costs AS net_return
FROM
([SQ1]) AS financeData
SELECT
@supplyFee := 0
@demandFee := 0
@charedFee := 0
SELECT
financeWithNetReturn.*,
@supplyFee := @supplyFee + financeWithNetReturn.supply_fee,
@demandFee := @demandFee + financeWithNetReturn.demand_fee,
@charedFee := @charedFee + financeWithNetReturn.charged_fee
FROM
([SQL2]) AS financeWithNetReturn,
([SQL3]) AS variableInit
SELECT
financesTallied.date,
financesTallied.rate,
financesTallied.supply_fee,
financesTallied.demand_fee,
financesTallied.charged_fee,
financesTallied.total_costs,
financesTallied.net_return
FROM ([SQL4]) AS financesTallied
下一个层次,我只是重复使用计算的总成本列和供应费用列,以添加一个净回报列。这就得出了每行所需的基本数据,将其称为[SQL2]
SELECT
date,
rate,
supply_fee,
demand_fee,
charged_fee,
(supply_fee+demand_fee+charged_fee)/rate AS total_costs // need clarification on others/rate
FROM financies
WHERE date BETWEEN '2010-01-10' AND '2011-01-01'
ORDER BY date ASC
SELECT
financeData.*,
financeData.supply_fee - financeData.total_costs AS net_return
FROM
([SQ1]) AS financeData
SELECT
@supplyFee := 0
@demandFee := 0
@charedFee := 0
SELECT
financeWithNetReturn.*,
@supplyFee := @supplyFee + financeWithNetReturn.supply_fee,
@demandFee := @demandFee + financeWithNetReturn.demand_fee,
@charedFee := @charedFee + financeWithNetReturn.charged_fee
FROM
([SQL2]) AS financeWithNetReturn,
([SQL3]) AS variableInit
SELECT
financesTallied.date,
financesTallied.rate,
financesTallied.supply_fee,
financesTallied.demand_fee,
financesTallied.charged_fee,
financesTallied.total_costs,
financesTallied.net_return
FROM ([SQL4]) AS financesTallied
在这个级别上,是时候开始计算值了,因此需要使用0值初始化所需的变量([SQL3])
下一级,我将使用计算出的行来计算总数([SQL4])
现在终于到了顶层,只需输出所需的列,而不输出计算列([SQL5])
然后将其与总计行联合输出
([SQL5]) UNION (
SELECT
'*Total*',
NULL,
@supplyFee,
@demandFee,
@chargedFee,
NULL,
NULL
)
试图重新格式化您的帖子,但是作为净返回
和'2010-01-10和''2011-01-01'
看起来不正确,您打开了两个括号,但只关闭了一个…重述了帖子确实看到了一个您的公式需要澄清,它们实际上没有太多意义逐字逐句地计算总成本是通过将收费费用与其他费用(其他费用)相加来计算的然后除以费率,再加上demandfee。净回报是通过从总成本中减去供应费来计算的。希望这能澄清计算结果。上面的查询运行成功,但返回的结果集为零。问题是否与查询本身有关?@smilezjim,检查数据,是否有符合Having
分类标准的数据?没问题,我非常喜欢有趣的数据。稍微整理一下我的答案-也许可以稍微整理一下这些评论(稍后将删除此评论)