2015-08-25 50 views
0

我有一個查詢類似如下:在SQL中,JOIN後COUNT(*)是否發生?

SELECT LOCATION_CODE AS "Location", 
     COUNT(prha.authorization_status) AS "Reqn Lines Count Approved" , 
    FROM tabl t1 
      JOIN table t1 ... etc 
      JOIN 

我的問題是 - 假設我想總結出的東西都計數,然後將「對立」計數(即計數空白和零的);全部在一個查詢內。

所以我想知道這是否可能?或者COUNT(*)函數只在我們使用JOIN之後纔會發生?謝謝

+3

'select'在邏輯上發生在連接之後。 –

+0

@ShannonSeverance - 好了解。所以在我的情況下,我認爲我需要一個單獨的查詢,然後爲零和0。但我的問題是,如果它至少有1個,它將只顯示一個列值。 – Coffee

+0

你可以做一個條件案例,例如。 '計數(當nvl(col1,0)= 0,然後1結束)',也許? – Boneist

回答

1

我不確定我完全理解你在問什麼,但是最近版本的Oracle在技術上並不需要執行連接,只要它們不會影響所需的結果。

如果您計算表中的記錄並將其加入到有外鍵約束的表中,則優化程序可以推斷該連接不是必需的,並且可以省略它。此外,我似乎還記得,在某些情況下,優化器也可以在連接之前執行聚合,如果這樣做效率更高(例如,如果在DW事實表和維度表之間進行連接,在維度的原子級別進行分組並選擇許多維度列 - 可以在加入維度之前在事實表上執行聚合,以便減少聚合所需的排序大小)。

因此,在正常情況下,聯接將首先執行,在某些情況下不會。