2017-10-04 192 views
-1

我查詢一個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

回答

0

也許你想從結果集中刪除「重複」。請檢查:

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上的索引可能會加快速度。

相關問題