在group by子句中添加常量值列

时间:2014-02-07 20:07:34

标签: sql group-by netezza

Netezza sql在此查询中出错:原因:无效的列名称'dummy'。

 select col1,col2, '' as dummy, max(col3) from table1  group by col1,col2,dummy

如果我从group by子句中删除虚拟,它可以正常工作。但是根据sql语法,我应该在group by中包含所有非聚合列。

5 个答案:

答案 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