Netezza sql在此查询中出错:原因:无效的列名称'dummy'。
select col1,col2, '' as dummy, max(col3) from table1 group by col1,col2,dummy
如果我从group by子句中删除虚拟,它可以正常工作。但是根据sql语法,我应该在group by中包含所有非聚合列。
答案 0 :(得分:6)
为什么你需要在你的小组中,你可以使用一个聚合函数,它的结果总是正确的,因为值是常数,例如:
select col1,col2, min(' ') as dummy, max(col3) from table1 group by col1,col2
答案 1 :(得分:4)
这是由于操作的顺序......
这 加入 哪里 通过...分组 ... SELECT
使用分组依据时,只有上一步剩余的字段可用。由于您没有在Select语句之前声明“Dummy”列,因此group by不知道它存在,因此不需要考虑它。
答案 2 :(得分:3)
“dummy”是一个静态列(不在表中),因此它不需要在group by中,因为它是一个外部列。
SELECT col1,
col2,
cast(5 as int) AS [dummy],
max(col3)
FROM test_1
GROUP BY col1,
col2,
col3,
'dummy'
代码产生外部引用错误#164。
看看这些链接
http://www.sql-server-helper.com/error-messages/msg-164.aspx
http://www.sql-server-helper.com/error-messages/msg-1-500.aspx
答案 3 :(得分:1)
按基础进行.. GROUP BY
操作是在JOIN
操作(文件IO)之后执行的。然后只有SELECTED
结果可用。
现在,您在Dummy
中指定了SELECT
,并且数据库不会知道它,因为虽然GROUP
它在TABLE级别不可用。!
使用GROUP BY your_column, ' '
尝试查询它会起作用..因为您直接提到它而不是引用别名!
最后,当使用GROUP by
时..您可以在SELECT或GROUP BY中指定任何常量..因为它们后面包含在SELECTed
结果中,而不涉及TABLE操作。所以数据库可以原谅他们。
答案 4 :(得分:0)
要解决此问题,请将其分组在外层:
SELSE X.col1, X.col2, X.dummy, max(col3)
FROM (
SELECT col1,
col2,
cast(5 as int) AS [dummy],
col3
FROM test_1
)
GROUP BY X.col1,
X.col2,
X.dummy