Отвечал, но почему?Mysql 1-й запрос выполняется второй не нужно понимать, почему? - PullRequest
0 голосов
/ 29 июня 2019

Этот SQL-запрос работает, но второй не может, может кто-то объяснить, почему и как он работает?

Первый работает на основе выборок на основе строк, второй я хочу, чтобы все столбцы и строки были больше глобального среднего. Имя может содержать от 1 до X записей, поэтому оно должно быть по имени группы.

SELECT NAME,
       AVERAGE,
       AD1, AD2, AD3, AD4, AD5, AD6,
       (AD1 + AD2 + AD3 + AD4 + AD5 + AD6) AS TOTAL_AD
FROM ( SELECT
    NAME,
    AVERAGE,
    (AVG1-AVERAGE) AS AD1,
    (AVG2-AVERAGE) AS AD2,
    (AVG3-AVERAGE) AS AD3,
    (AVG4-AVERAGE) AS AD4,
    (AVG5-AVERAGE) AS AD5,
    (AVG6-AVERAGE) AS AD6
    FROM P_AVG ) AS T
ORDER BY NAME;

Работает как положено.

SELECT NAME,
       AVG(AVERAGE),
       AD1, AD2, AD3, AD4, AD5, AD6,
       (AD1 + AD2 + AD3 + AD4 + AD5 + AD6) AS TOTAL_AD
FROM ( SELECT
    NAME,
    AVG(AVERAGE),
    (AVG(AVG1)-AVG(AVERAGE)) AS AD1,
    (AVG(AVG2)-AVG(AVERAGE)) AS AD2,
    (AVG(AVG3)-AVG(AVERAGE)) AS AD3,
    (AVG(AVG4)-AVG(AVERAGE)) AS AD4,
    (AVG(AVG5)-AVG(AVERAGE)) AS AD5,
    (AVG(AVG6)-AVG(AVERAGE)) AS AD6
    FROM P_AVG GROUP BY NAME ) AS T;

Mysql возвращает эту ошибку для запроса, в котором находится столбец.

1054 - Неизвестный столбец 'AVERAGE' в 'списке полей'

Не запускается и возвращает ошибку.

Это исправлено, но почему?

SELECT NAME,
       AD,
       AD1, AD2, AD3, AD4, AD5, AD6,
       (AD1 + AD2 + AD3 + AD4 + AD5 + AD6) AS TOTAL_AD
FROM ( SELECT
    NAME,
    (AVG(AVERAGE)) AS AD,
    (AVG(AVG1)-AVG(AVERAGE)) AS AD1,
    (AVG(AVG2)-AVG(AVERAGE)) AS AD2,
    (AVG(AVG3)-AVG(AVERAGE)) AS AD3,
    (AVG(AVG4)-AVG(AVERAGE)) AS AD4,
    (AVG(AVG5)-AVG(AVERAGE)) AS AD5,
    (AVG(AVG6)-AVG(AVERAGE)) AS AD6
    FROM P_AVG GROUP BY NAME ) AS T;

1 Ответ

1 голос
/ 29 июня 2019

в вашем запросе ошибка вызвана отсутствием правильного псевдонима для (AVG(AVERAGE))

. Практически вы выбираете по внешнему выбору имя столбца, который не существует

попробуйте добавитьправильный псевдоним в этом столбце, например:

  AVG(AVERAGE) AVERAGE

.

  SELECT NAME,
         AVG(AVERAGE),
         AD1, AD2, AD3, AD4, AD5, AD6,
         (AD1 + AD2 + AD3 + AD4 + AD5 + AD6) AS TOTAL_AD
  FROM ( 
      SELECT
      NAME,
      AVG(AVERAGE) AVERAGE,
      (AVG(AVG1)-AVG(AVERAGE)) AS AD1,
      (AVG(AVG2)-AVG(AVERAGE)) AS AD2,
      (AVG(AVG3)-AVG(AVERAGE)) AS AD3,
      (AVG(AVG4)-AVG(AVERAGE)) AS AD4,
      (AVG(AVG5)-AVG(AVERAGE)) AS AD5,
      (AVG(AVG6)-AVG(AVERAGE)) AS AD6
      FROM P_AVG 
      GROUP BY NAME ) AS T;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...