:使用 HAVING 子句選擇行

字號:


    having使用 HAVING 子句選擇行
    HAVING 子句對 GROUP BY 子句設(shè)置條件的方式與 WHERE 子句和 SELECT 語句交互的方式類似。WHERE 子句搜索條件在進(jìn)行分組操作之前應(yīng)用;而 HAVING 搜索條件在進(jìn)行分組操作之后應(yīng)用。HAVING 語法與 WHERE 語法類似,但 HAVING 可以包含聚合函數(shù)。HAVING 子句可以引用選擇列表中出現(xiàn)的任意項(xiàng)。
    下面的查詢得到本年度截止到目前的銷售額超過 $40,000 的出版商:
    USE pubs
    SELECT pub_id, total = SUM(ytd_sales)
    FROM titles
    GROUP BY pub_id
    HAVING SUM(ytd_sales) > 40000
    下面是結(jié)果集:
    pub_id total
    ------ -----------
    0877 44219
    (1 row(s) affected)
    為了確保對每個(gè)出版商的計(jì)算中至少包含六本書,下面示例使用 HAVING COUNT(*) > 5 消除返回的總數(shù)小于六本書的出版商:
    USE pubs
    SELECT pub_id, total = SUM(ytd_sales)
    FROM titles
    GROUP BY pub_id
    HAVING COUNT(pub_id) > 5
    下面是結(jié)果集:
    pub_id total
    ------ -----------
    0877 44219
    1389 24941
    (2 row(s) affected)
    理解應(yīng)用 WHERE、GROUP BY 和 HAVING 子句的正確序列對編寫高效的查詢代碼會有所幫助:
    WHERE 子句用來篩選 FROM 子句中指定的操作所產(chǎn)生的行。
    GROUP BY 子句用來分組 WHERE 子句的輸出。
    HAVING 子句用來從分組的結(jié)果中篩選行。
    對于可以在分組操作之前或之后應(yīng)用的搜索條件,在 WHERE 子句中指定它們更有效。這樣可以減少必須分組的行數(shù)。應(yīng)當(dāng)在 HAVING 子句中指定的搜索條件只是那些必須在執(zhí)行分組操作之后應(yīng)用的搜索條件。
    Microsoft® SQL Server? 2000 查詢優(yōu)化器可處理這些條件中的大多數(shù)。如果查詢優(yōu)化器確定 HAVING 搜索條件可以在分組操作之前應(yīng)用,那么它就會在分組之前應(yīng)用。查詢優(yōu)化器可能無法識別所有可以在分組操作之前應(yīng)用的 HAVING 搜索條件。建議將所有這些搜索條件放在 WHERE 子句中而不是 HAVING 子句中。
    以下查詢顯示包含聚合函數(shù)的 HAVING 子句。該子句按類型分組 titles 表中的行,并且消除只包含一本書的組:
    USE pubs
    SELECT type
    FROM titles
    GROUP BY type
    HAVING COUNT(type) > 1
    下面是結(jié)果集:
    type
    ------------------
    business
    mod_cook
    popular_comp
    psychology
    trad_cook
    (5 row(s) affected)
    以下是沒有聚合函數(shù)的 HAVING 子句的示例。該子句按類型分組 titles 表中的行,并且消除不是以字母 p 開頭的那些類型。
    USE pubs
    SELECT type
    FROM titles
    GROUP BY type
    下面是結(jié)果集:
    type
    ------------------
    popular_comp
    psychology
    《使用 HAVING 子句選擇行》由留學(xué)liuxue86.com編輯整理