Средние значения по нескольким столбцам отдельно - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть таблица сбора1 со следующими столбцами:

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 независимо.

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

Если вы хотите 2 запроса для отдельных результатов:

SELECT col1, AVG(value) AS average1
from table1
GROUP BY col1
ORDER BY col1

и

SELECT col2, AVG(value) AS average2
from table1
GROUP BY col2
ORDER BY col2
0 голосов
/ 23 ноября 2018

это будет работать:

  select avg(value),col1 from Table1 group by col1
  union all
  select avg(value),col2 from Table1 group by col2

sql fiddle: http://sqlfiddle.com/#!9/c1f111/5/0

0 голосов
/ 23 ноября 2018

Используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...