【问题标题】:using subquery's column alias as a property in main query在主查询中使用子查询的列别名作为属性
【发布时间】:2021-03-20 08:29:27
【问题描述】:

我想知道主查询是否可以看到别名,这是一个例子:

SELECT AVG(values)
FROM(
  SELECT SUM(a1) AS values
  FROM tableX
)

第一个查询是否看到别名“values”?

【问题讨论】:

  • values 是一个不好的例子,因为它是一个关键字并且可能会造成麻烦,因此您可能需要使用另一个别名。但是你有没有试过它是否适合你自己?你发现了什么?

标签: sql subquery aggregate-functions alias


【解决方案1】:

第一个查询是否看到别名“values”?

是的,确实如此。子查询创建一个派生表,别名在该上下文中充当列名。但是,标准 SQL 要求您为子查询提供别名。

所以:

SELECT AVG(vals)
FROM(
    SELECT SUM(a1) AS vals
    FROM tableX
) t --> alias of the subquery

旁注:

  • values 是语言关键字,因此不是列名的好选择;我在查询中将其重命名为vals

  • 你的例子真的很做作;子查询总是返回一行,因此在外部查询中再次聚合没有什么意义:这保证返回与子查询相同的值。一个更有用的例子是在子查询中放置一个group by 子句,就像这样

SELECT AVG(vals)
FROM(
    SELECT SUM(a1) AS vals
    FROM tableX
    GROUP BY id
) t

【讨论】:

  • 提建议:)
  • 是的,group by 是必需的,我简化了只关注别名的问题
猜你喜欢
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多