Группировка столбцов из вложенного выбора - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть таблица 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.

1 Ответ

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

Вам нужно сделать отдельные запросы для каждого

SELECT q1.*, q2.*, q3.*
FROM (SELECT AVG(value)
      FROM  Table1) as q1
CROSS JOIN ( SELECT *
             FROM Table1
             ORDER BY value
             LIMIT 1) as q2
CROSS JOIN ( SELECT *
             FROM Table1
             ORDER BY value DESC
             LIMIT 1) as q3

Вы можете использовать JSON_OBJECT(key1, value1, key2, value2, ... key(n), value(n))

 SELECT q1.*, 
    JSON_OBJECT("id", q2.id, "label", q2.label,"value", q2.value),
    JSON_OBJECT("id", q3.id, "label", q3.label,"value", q3.value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...