选择全表两列之间的平均值

use*_*349 0 mysql average

我有一张桌子(例如):

price_from price_to
10 100
20 60
0 70
30 0
Run Code Online (Sandbox Code Playgroud)

我正在寻找在每行中的数字和结果值的平均值之间选择平均值的方法。谢谢!

VKK*_*VKK 5

每行中 price_from 和 price_to 的平均值:

SELECT (price_from + price_to) / 2 AS row_avg FROM tablename;
Run Code Online (Sandbox Code Playgroud)

以上各行平均值的平均值:

SELECT AVG((price_from + price_to) / 2) AS avg_of_avgs FROM tablename;
Run Code Online (Sandbox Code Playgroud)

每列的平均值:

SELECT AVG(price_from) AS price_from_avg, AVG(price_to) AS price_to_avg FROM tablename;
Run Code Online (Sandbox Code Playgroud)

所有数据的平均值(price_from 和 price_to):

SELECT AVG(p) as total_avg FROM 
(SELECT price_from AS p FROM tablename UNION ALL SELECT price_to FROM tablename) dummyname;
Run Code Online (Sandbox Code Playgroud)

如果 price_from 和 price_to 都是整数,上述查询将返回整数平均值。如果在这种情况下需要小数平均值,则需要使用 cast 将每个列计算中的至少一个数字转换为浮点数。然后查询将变为:

每行中 price_from 和 price_to 的平均值(带演员表):

SELECT ( CAST(price_from AS FLOAT) + price_to ) / 2 AS row_avg FROM tablename;
Run Code Online (Sandbox Code Playgroud)

以上每个行平均值查询的平均值(带演员表):

SELECT AVG( ( CAST(price_from AS FLOAT) + price_to ) / 2 ) AS avg_of_avgs FROM tablename;
Run Code Online (Sandbox Code Playgroud)

每列的平均值(带演员表):

SELECT AVG( CAST(price_from AS FLOAT) ) AS price_from_avg, 
AVG( CAST(price_to AS FLOAT) ) AS price_to_avg FROM tablename;
Run Code Online (Sandbox Code Playgroud)

所有数据的平均值(price_from 和 price_to 与 cast):

SELECT AVG(p) as total_avg FROM
(SELECT CAST(price_from AS FLOAT) AS p FROM tablename UNION ALL 
SELECT CAST(price_to AS FLOAT) FROM tablename) dummyname;
Run Code Online (Sandbox Code Playgroud)