如何不在GROUP BY子句中不使用聚合函数
问题描述:
我查询一个Oracle数据库选择一列(简化查询有更多的条件):如何不在GROUP BY子句中不使用聚合函数
SELECT field1, MAX(field2) AS something
FROM table1
WHERE (field3 = 'something1')
GROUP BY field1
这是一个非常大的数据库和MAX是查杀加载时间。 我不需要MAX值。字段包含文本值。它可以是任何值,因为它们对于给定的字段1应该是相同的。它可以是第一,最后,无论更快。
答
也许你想从结果集中删除“重复”。请检查:
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上的索引可能会加快速度。
为什么你认为'max()'是问题而不是'group by'? –
Gordon从我口中说出了这些话 - GROUP BY更可能是瓶颈。你可以测试这个:SELECT ** DISTINCT ** field1 from table1 where field3 ='something1',看看这比你发布的查询花费的时间少得多。如果没有,你会知道分组是问题,而不是MAX。 – mathguy
因为没有最大值和通过查询分组工作正常 – GlutVonSmark