Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 列的总和_Mysql_Sql - Fatal编程技术网

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
分类标准的数据?没问题,我非常喜欢有趣的数据。稍微整理一下我的答案-也许可以稍微整理一下这些评论(稍后将删除此评论)