首页 > 解决方案 > 分别按多列平均

问题描述

我有一个包含以下列的集合 table1:

id (INT)
col1 (VARCHAR)
col2 (VARCHAR)
value (INT)

我想逐个计算平均值col1得到col2这样的响应:

{
    averageByCol1: {col1Value1: 23, col1Value2: 44},
    averageByCol2: {col2Value1: 33, col2Value2: 91}
}

试图在 GROUP BY 中使用多个列,但这结合了这些列:

SELECT
CONCAT(col1, col2, AVG(value))
FROM table1
GROUP BY col1, col2

也尝试使用子查询,但它给了我Subquery returns more than 1 row错误:

SELECT
    (SELECT
    CONCAT(col1, AVG(value))
    FROM table1
    GROUP BY col1) AS col1Averages,
    (SELECT
    CONCAT(col2, AVG(value))
    FROM table1
    GROUP BY col2) AS col2Averages;

使用 Mysql v5.5。

使用示例数据编辑:

id  col1    col2    value
1   v1      b1      34
2   v2      b1      65
3   v1      b1      87
4   v1      b2      78
5   v2      b2      78
6   v1      b2      12

value要独立地按 v1、v2、b1 和 b2 取平均值。

标签: mysqlsql

解决方案


对要计算平均值的每一列使用 UNION

SELECT col1 as col_key, avg(value) as average
FROM test
GROUP BY col1
UNION
SELECT col2, avg(value)
FROM test
GROUP BY col2

推荐阅读