我想修改保留旧列别名的列。但是当我对其进行分组时会发生错误。
CREATE TABLE some_table (
number1 integer,
number2 integer,
name text
)
有了新的别名就可以了:
SELECT number1-number2 AS new_number FROM some_table GROUP BY new_number
但是一旦我想保留旧的列名:
SELECT number1-number2 AS number1 FROM some_table group by number1
列“some_table.number2”必须出现在 GROUP BY 子句中或用于聚合函数
我可以通过两种方式解决这个问题:
1.将其包装在另一个选择下
SELECT new_number AS number1 FROM (
SELECT number1-number2 AS new_number FROM some_table GROUP BY new_number) AS query
2.在'group by'子句中提供列号
SELECT number1-number2 AS number1 FROM some_table GROUP BY 1
如果没有上面提供的解决方案,是否有办法以某种方式保留旧别名?
最佳答案
您的原始查询是编写此类查询的最佳方式。您应该始终使用与列名不同的别名。
您的第二个查询不完整,使用与列名相等的别名有点混淆。 SELECT
子句中定义的别名不能用在 GROUP BY
子句中,因为后者发生在前者之前。所以你拥有的是:
SELECT number1-number2 AS number1 FROM some_table
GROUP BY some_table.number1
当你需要的时候
SELECT number1-number2 AS number1 FROM some_table
GROUP BY some_table.number1, some_table.number2
或者没有表限定符:
SELECT number1-number2 AS number1 FROM some_table
GROUP BY number1, number2
(当然,如果没有任何聚合发生,这仍然几乎没有任何意义,但我知道,这只是一个例子:-)
无论如何,重新使用列名作为别名仍然不是一个好主意。想象一下 ORDER BY number1
- 它指的是什么;列名或别名? (我很确定别名在这里具有优先权,但我不知道 SQL 标准是否真的定义了这一点。)
关于sql - 如何使用旧列的别名对新创建的列进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53176900/