Oracle:选择*和聚合列

时间:2013-12-06 09:10:24

标签: oracle

是否可以使用以下方法选择字段?

SELECT *, count(FIELD) FROM TABLE GROUP BY TABLE

我收到以下错误

ORA-00923: FROM keyword not found where expected
00923. 00000 -  "FROM keyword not found where expected"
*Cause:    
*Action:
Error at Line: 1 Column: 9

是语法错误还是您必须明确定义每个列而不是使用*?

3 个答案:

答案 0 :(得分:3)

您无法使用*和其他列。如果您使用别名,则可以:

SELECT t.*
,      count(FIELD) 
FROM   TABLE t

此外,您的GROUP BY TABLE错了。您不能按表名分组,必须指定一些列,如下所示:

SELECT   t.customer
,        count(FIELD) 
FROM     TABLE t
GROUP BY t.customer

答案 1 :(得分:2)

字段中选择的列应为

  • 用作标准组之一的表达式,或
  • 聚合函数,或
  • 字面值

为此,您需要指明所需的字段,并且应符合上述标准。

SELECT FIELD1,FIELD2, COUNT(*) FROM TABLE1 GROUP BY FIELD1, FIELD2

如果您坚持使用查询的逻辑,则使用子查询应该会有所帮助。 例如,

SELECT * FROM TABLE1 T1 INNER JOIN (SELECT FIELD1, COUNT(FIELD1) AS [CountOfFIELD1] FROM TABLE1 T2 GROUP BY FIELD1)T3 ON T1.FIELD1=T3.FIELD1

答案 2 :(得分:1)

您需要提供列名称,而不是*

SELECT a, b, COUNT(FIELD)
FROM TABLE 
GROUP BY a, b;