Mając (SQL)

Klauzula HAVING w języku SQL określa, że ​​instrukcja SQL SELECT może zwracać tylko te wiersze, w których wartości zagregowane spełniają określone warunki .

HAVING i WHERE są często mylone przez początkujących, ale służą innym celom. WHERE jest uwzględniane na wcześniejszym etapie wykonywania zapytania, filtrując wiersze odczytane z tabel. Jeśli zapytanie zawiera GROUP BY , wiersze z tabel są grupowane i agregowane. Po operacji agregacji funkcja HAVING , która odfiltrowuje wiersze niespełniające określonych warunków. Dlatego WHERE dotyczy danych odczytywanych z tabel, a HAVING powinno dotyczyć tylko danych zagregowanych, które nie są znane na początkowym etapie zapytania.

Aby wyświetlić obecny warunek utworzony przez klauzulę GROUP BY , używana jest klauzula HAVING . [ wymagane wyjaśnienie ]

Przykłady

Aby zwrócić listę identyfikatorów działów, których łączna sprzedaż przekroczyła 1000 USD w dniu 1 stycznia 2000 r., wraz z sumą ich sprzedaży w tym dniu:

  
 
   
  
    SELECT  DeptID  ,  SUMA  (  SprzedażKwota  )  FROM  Sales  WHERE  SaleDate  =  '01-Jan-2000'  GROUP  BY  DeptID  HAVING  SUM  (  SaleAmount  )  >  1000 

Odwołując się do przykładowych tabel w przykładzie Join , poniższe zapytanie zwróci listę działów, które mają więcej niż 1 pracownika:

   
 
      
  
    SELECT  Nazwa działu  ,  LICZBA  (  *  )  FROM  Pracownik  DOŁĄCZ DO  Działu  ON  Pracownik  .  Identyfikator działu  =  Dział  .  DepartmentID  GROUP  BY  DepartmentName  HAVING  COUNT  (  *  )  >  1  ; 

MIEĆ jest wygodne, ale nie konieczne. Kod odpowiadający powyższemu przykładowi, ale bez użycia HAVING , może wyglądać następująco:

   
          
       
           
      
  
    SELECT  *  FROM  (  SELECT  Nazwa działu  AS  nazwa_działu  ,  LICZBA  (  *  )  AS  Liczba pracowników   FROM  Pracownik  AS  pracownik  JOIN  Dział  AS  dział  ON pracownik   .  ID  działu  =  dział  .  ID działu  GRUPA WEDŁUG  nazwy  działu  )  AS  grp  WHERE  grp  .  liczba pracowników  >  1  ; 

Linki zewnętrzne