首页 > 解决方案 > “对于此服务器版本,选择在此位置无效,需要 '(' WITH"

问题描述

我目前正在尝试运行 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,但是如果两个薪水相同,这将无法给出预期的结果。

任何想法都非常感谢。

谢谢,纳什

标签: mysqlsqlsubquery

解决方案


正如您所提到的,您希望对不同地点的工资进行平均,并找到工资最高的地点。以下将为您提供预期的输出。

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;

推荐阅读