У меня есть таблица table1
со следующими столбцами:
id (INT)
label (VARCHAR)
value (INT)
Я хочу получить среднее значение для столбца value
, всю строку, где value
является наибольшим, и строку с самым низким value
. Примерно так:
{
average: xxx,
maxval: {
id: x,
label: x,
value: x
},
minval: {
id: x,
label: x,
value: x
}
}
Попробовал следующий запрос:
SELECT
AVG(a.value) AS average,
b.*,
c.*
FROM table1 a
INNER JOIN table1 b ON ( b.value = (SELECT MAX(value) FROM table1 WHERE label = "el"))
INNER JOIN table1 c ON ( c.value = (SELECT MIN(value) FROM table1 WHERE label = "el"))
WHERE a.label = "el";
но это вернет все поля на одном уровне, например:
{
average,
id,
label,
value,
id,
label,
value
}
Пробовал это тоже:
SELECT
AVG(a.value) AS average,
(SELECT b.* FROM table1 b WHERE ( b.value = (SELECT MAX(value) FROM table1 WHERE label = "el"))) AS maxval,
(SELECT c.* FROM table1 c WHERE ( c.value = (SELECT MIN(value) FROM table1 WHERE label = "el"))) AS minval
FROM table1 a
WHERE a.label = "el";
Этот последний выдает ошибку, так как я пытаюсь использовать один псевдоним для нескольких столбцов.
Использование MySQL 5.5.