如何不在GROUP BY子句中不使用聚合函数

问题描述:

我查询一个Oracle数据库选择一列(简化查询有更多的条件):如何不在GROUP BY子句中不使用聚合函数

SELECT  field1, MAX(field2) AS something 
FROM   table1 
WHERE  (field3 = 'something1') 
GROUP BY field1 

这是一个非常大的数据库和MAX是查杀加载时间。 我不需要MAX值。字段包含文本值。它可以是任何值,因为它们对于给定的字段1应该是相同的。它可以是第一,最后,无论更快。

+2

为什么你认为'max()'是问题而不是'group by'? –

+1

Gordon从我口中说出了这些话 - GROUP BY更可能是瓶颈。你可以测试这个:SELECT ** DISTINCT ** field1 from table1 where field3 ='something1',看看这比你发布的查询花费的时间少得多。如果没有,你会知道分组是问题,而不是MAX。 – mathguy

+0

因为没有最大值和通过查询分组工作正常 – GlutVonSmark

也许你想从结果集中删除“重复”。请检查:

WITH cte AS (
    SELECT DISTINCT field1 
    FROM table1 
    WHERE field3 = 'something1' 
) 
SELECT field1, sub.field2 
FROM cte c 
OUTER APPLY (SELECT field2 
      FROM table1 t 
      WHERE rownum = 1 
       AND t.field1 = c.field1) sub; 

field3和field1上的索引可能会加快速度。