【问题标题】:Error Code: 1248. Every derived table must have its own alias错误代码:1248。每个派生表都必须有自己的别名
【发布时间】:2020-02-19 14:17:55
【问题描述】:
SELECT dept_name,avg_salary
FROM (SELECT dept_name,AVG(salary) AS avg_salary
        FROM instructor
        group by dept_name)
WHERE avg_salary>42000;

【问题讨论】:

  • 您能否描述您的问题,提供背景信息并说明您尝试解决的方法?

标签: mysql sql group-by subquery alias


【解决方案1】:

将别名添加到派生表。例如:

SELECT dept_name,avg_salary 
FROM (SELECT dept_name,AVG(salary) AS avg_salary 
      FROM instructor group by dept_name) x
WHERE avg_salary>42000;

你看到我添加的x了吗?

【讨论】:

    【解决方案2】:

    Impaler 的回答是正确的,实际上解决了您遇到的错误。

    但是,让我指出,您不需要子查询来实现您的目的。要过滤聚合表达式,您可以使用 having 子句,它是标准 SQL 的一部分:

    select dept_name, avg(salary) as avg_salary
    from instructor
    group by dept_name
    having avg(salary) > 42000;
    

    最重要的是,MySQL 扩展了标准并允许您在 having 子句中使用列别名,这进一步简化了查询:

    select dept_name, avg(salary) as avg_salary
    from instructor
    group by dept_name
    having avg_salary > 42000;
    

    我希望这个解决方案应该比使用子查询更有效(除非数据库足够聪明,可以发现这种优化,在这种情况下,它在性能方面是等效的);而且它肯定更简洁,更容易理解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-30
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多