2012-11-14 36 views
0

我试图通过一些其他帖子的表达式错误来了解关于组的不是一个组,但它们都提到了组函数,例如MAX,MIN等。我没有使用任何它是一个非常简单的查询返回这种错误。真的很简单SQL不是一个GROUP BY表达式 - Oracle

SELECT * 
FROM ad_voarnet_atendimento_pista 
WHERE is_closed = 0 
GROUP BY prefixo 
ORDER BY prefixo 

我在做什么错在这里?

编辑:

预期的结果是相同的是,MySQL会给我这个查询。它会排除PREFIXO列的每个重复值。我只需要提到的列中每个值的1条记录。 该错误消息是这样的:

[Err] ORA-00979: not a GROUP BY expression 
+0

你会得到什么确切的错误信息? – Aaron

+0

你想做什么?什么是预期的输出? –

+0

我试图得到MySQL会给我这个SQL。它会排除PREFIXO列的每个可重复值。 –

回答

3

GROUP BY不像MIN() MAX() SUM() COUNT()聚合函数的上下文中有用的外,也许除了删除重复的行。只要删除它。如果您正在寻找重复数据删除结果,请改用DISTINCT。如果您使用DISTINCT,除非您更具体地了解SELECT列表中的列(不包括主键列),否则它的价值不会很高。

SELECT 
    DISTINCT * 
FROM 
    AD_VOARNET_ATENDIMENTO_PISTA 
WHERE IS_CLOSED = 0 
ORDER BY PREFIXO 

GROUP BY有时与ORDER BY困惑。你已经有ORDER BY PREFIX0,

+1

'DISTINCT *'是非常没用的,因为它将包含主键列,因此 - 根据定义 - 结果中不会有重复项。 –

+0

* DISTINCT *子句不会使每个重复的行都被排除?我想要的是与MySQL相同的GROUP BY会给我:如果结果已经有这样的值,它将被忽略,但仅限于我提到的字段。 –

+1

@MarcoAurélioDeleuMySQL有一个非常不同的“GROUP BY”默认行为,它不存在于其他RDBMS中。 MySQL允许你在'SELECT'中包含一些列,这些列在'GROUP BY'中也不存在,有时不确定的结果,但这在其他RDBMS中是不可能的。你的输入数据是什么,你想要什么结果? –

相关问题