mysql - 分别按多列平均
问题描述
我有一个包含以下列的集合 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 取平均值。
解决方案
对要计算平均值的每一列使用 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
推荐阅读
- java - 抛出 NullPointerException,但对象已创建并正确返回值
- r - 当 R 中的值相似时,如何给直方图更多的变化?
- functional-programming - string-append 似乎将字符串标识为列表
- python - 从 API 中提取时出现 JSON 解码错误?
- android - 单击主要活动按钮后,更新 ViewPager 的片段部分内的适配器?
- excel - 为什么从数据透视源中清除数据如此缓慢,尤其是如果我将源位置更改为不同的工作表
- windows - 如何在通过 WiFi 路由器连接的 Win 10 中设置 ISP 提供的静态 IP
- java - Android DialogFragment 从参数中获取空列表
- java - 如何解决android studio中面临的渲染问题
- python - 在python中,有没有办法使用类和继承在屏幕上输出两个(或更多)按钮?