【问题标题】:Average of two columns in SQLSQL中两列的平均值
【发布时间】:2014-01-19 05:53:10
【问题描述】:

我想取两列的平均值并在新列中显示如下:

+-+--+--+--+--------+--------+
|A|B |C |D |AVG(B/C)|AVG(C/B)|
+-+--+--+--+--------+--------+
|S|23|34|56|        |        |
+-+--+--+--+--------+--------+
|T|45|6 |79|        |        |
+-+--+--+--+--------+--------+

因此,如上所示,我需要获取每一行的值并执行 B/C,然后相应地取平均值以将其显示在新列中。

我想在 SQL 查询中执行此操作。是否可以在 SQL 命令中执行此操作?我知道AVG() 函数确实取一列的平均值,但我怎么能做B/C 然后取平均值?另外,如果我还需要取 B 和 C 的平均值,我该怎么做。

这就是我现在正在做的事情:

Select A,B,C,D FROM tableTest where A='S';

我现在必须取相应的平均值,并且在查询中另外还有两列来显示各自的结果。

【问题讨论】:

    标签: sql database postgresql average


    【解决方案1】:

    你应该试一试:

    SELECT A, AVG((B+C)/2) as bc, AVG((C+B)/2) as cb
    FROM tableTest
    WHERE A = 'S'
    GROUP BY A
    

    【讨论】:

    • 谢谢 MarcinJuraszek,它可以工作,但是如果我需要取两列的平均值而不是 column1/column2,那么我应该怎么做,只需 AVG(Col1,Col2) 就可以了吗?
    • 应用两列的简单数学AVG 应该与AVG((Col1 + Col2) /2) 相同,不是吗?
    • 是的,但我认为可能是 SQLAVG 内置函数只需要参数作为列名,并且它是两者的平均值。谢谢!
    【解决方案2】:

    AVG(col1/col2)AVG((col1+col2/2) 不同。

    使用GROUP BY怎么样?

    SELECT city, "平均花费:", AVG( sales-profit/ number-of-customer) FROM Sales GROUP BY City

    那就更好用

    SUM(销售利润)/SUM(客户数量)

    或使用

    AVG(销售利润)/AVG(客户数量)

    (但这不太实用(即可理解性较差)。

    【讨论】:

      【解决方案3】:

      你实际上不需要使用AVG 来获得两列之间的平均值,你可以做一个数学运算:

      Select A,B,C,D,(B+C)/2 AS BCAvg
      FROM tableTest 
      WHERE A = 'S';
      

      它在简单性方面略有优势,它不需要使用 AVG 函数或 GROUP BY 子句。

      【讨论】:

        猜你喜欢
        • 2018-07-12
        • 1970-01-01
        • 2014-08-15
        • 2013-01-25
        • 1970-01-01
        • 2021-04-19
        • 2017-03-05
        • 1970-01-01
        • 2023-01-31
        相关资源
        最近更新 更多