«В этой позиции выбор недействителен для этой версии сервера, ожидая» («С» - PullRequest
0 голосов
/ 16 марта 2020

В настоящее время я пытаюсь выполнить запрос SQL, и мне выдается ошибка: "Select is not valid at this position for this server version, expecting '(' WITH". Я прочитал другие сообщения с этой же ошибкой, и похоже, что это связано с отсутствующими запятыми в подзапросе. Насколько я знаю, я не пропускаю запятые.

SELECT employees.Location, AVG(employees.salaries) as AvgLocSal
FROM employees,
        (SELECT employees.Location, AVG(employees.salaries) as b
        FROM employees
        GROUP BY employees.Location) as otherSal
GROUP BY employees.Location
HAVING AvgLocSal >= all(otherSal.b);

Короче говоря, я сравниваю среднюю зарплату по местоположениям и нахожу местоположение с самой высокой зарплатой.

Я могу успешно сделать это, поместив подзапрос в предложение HAVING (как показано ниже), но я действительно не уверен, почему приведенный выше запрос выдает ошибку.

SELECT Location, AVG(salaries) as AvgLocSal
FROM employees
GROUP BY Location
HAVING AvgLocSal >= all(
                        SELECT AVG(salaries)
                        FROM employees
                        GROUP BY Location
                        );

Я мог бы просто ЗАКАЗАТЬ список по зарплатам, а затем ОГРАНИЧИТЬ до 1, однако это не дало бы желаемых результатов, если бы две зарплаты были одинаковыми.

Любые идеи очень ценятся.

Спасибо, Na sh

1 Ответ

1 голос
/ 16 марта 2020

Как вы упомянули, вы хотите усреднить зарплату в разных местах и ​​найти место с самой высокой зарплатой. Ниже приведен ожидаемый результат.

SELECT Location, AVG(salaries)
FROM employees
GROUP BY Location
ORDER BY 2 DESC
LIMIT 1;    

В качестве альтернативы:

SELECT MAX(avgSalary.salaries)
    FROM (SELECT AVG(salaries) AS 'salaries' FROM employees GROUP BY Location) AS avgSalary;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...