在彙總查詢中使用資料行
當您建立彙總查詢時,查詢和檢視表設計工具會做出特定假設,以便建構有效的查詢。 例如,如果您要建立彙總查詢並標記某資料行進行輸出,[查詢和檢視表設計工具] 會自動將該資料行變成 GROUP BY 子句的一部分,如此一來您便不會不慎在摘要中顯示個別資料列的內容。
使用群組依據
[查詢和檢視表設計工具] 根據下列規則使用資料行:
當您選擇 [群組依據] 選項或新增彙總函式至查詢時,所有標記為輸出或做為排序的資料行將自動新增至 GROUP BY 子句。 如果資料行已經是彙總函式的一部分,則不會新增至 GROUP BY 子句。
如果您不想要特定資料行變成 GROUP BY 子句的一部分,必須在 [準則] 窗格的 [群組依據] 資料行中選取不同的選項來進行手動變更。 但 [查詢和檢視表設計工具] 無法阻止您選擇造成查詢無法執行的選項。
如果您手動新增查詢輸出資料行至 [準則] 或 [SQL] 窗格中的彙總函式,[查詢和檢視表設計工具] 不會自動移除查詢的其他輸出資料行。 因此您必須移除查詢輸出中的其他資料行,或將它們變成 GROUP BY 子句或彙總函式的一部分。
當您將搜尋條件輸入 [準則] 窗格的 [篩選條件] 資料行時,[查詢和檢視表設計工具] 將遵守下列規則:
如果方格的 [群組依據] 資料行並未顯示 (因為您尚未指定彙總查詢),則將搜尋條件放入 WHERE 子句。
如果您已在彙總查詢中並已選取 [群組依據] 資料行中的 [位置] 選項,則將搜尋條件放入 WHERE 子句。
如果 [群組依據] 資料行中含有任何 [位置] 以外的值,則將搜尋條件放入 HAVING 子句。
使用 HAVING 和 WHERE 子句
以下原則說明如何在搜尋條件中參考彙總查詢中的資料行。 通常,您可以使用搜尋條件中的資料行來篩選應進行摘要的資料列 (WHERE 子句),或決定最後輸出 (HAVING 子句) 中出現的群組結果。
WHERE 或 HAVING 子句中可出現個別資料行,視該資料行在查詢中其他地方的使用情形而定。
WHERE 子句可用來選取要進行摘要和群組化的資料列子集,因此可在完成群組化前套用之。 因此,您可以在 WHERE 子句中使用資料行,即使該資料行並非 GROUP BY 子句的一部分或者並不在彙總函式中。 例如,下列陳述式選取價錢超過 $10.00 的所有書名並計算平均價格:
SELECT AVG(price) FROM titles WHERE price > 10
如果您建立的搜尋條件中使用了 GROUP BY 子句或彙總函式所用的資料行,搜尋條件可以 WHERE 子句或 HAVING 子句的形式出現,可在建立搜尋條件時決定。 例如,下列陳述式建立每個發行商的書本的平均價格,然後顯示每個發行商超過 $10.00 的平均價格:
SELECT pub_id, AVG(price) FROM titles GROUP BY pub_id HAVING (AVG(price) > 10)
如果您在搜尋條件中使用彙總函式,搜尋條件將使用到摘要而且必須是 HAVING 子句的一部分。