Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak zastosować posiadanie klauzuli z grupą przez w Select Query — samouczek SQL Server / TSQL, część 131

Scenariusz:

Pracujesz jako programista SQL Server, zostaniesz poproszony o napisanie zapytania, które powinno zwrócić Total SaleAmount z tabeli dbo.Customer według CountryShortName. Zostaniesz również poproszony o filtrowanie rekordów, w których Total SaleAmount według CountryShortName jest większy niż 10.


Rozwiązanie:

Z powyższego scenariusza zauważyłeś kilka rzeczy. Najpierw musimy zsumować SaleAmount. Po drugie musimy pogrupować według SaleAmount według CountryShortName. Ostatnią rzeczą, którą musimy filtrować te rekordy po obliczeniu sumy i zwraca tylko wtedy, gdy całkowita wartość SaleAmount jest większa niż 10. Nie możemy tutaj użyć klauzuli Where, ponieważ gdzie będzie filtrować rekordy przed Grupuj według. SQL Server udostępnia nam klauzulę Have, której możemy użyć do filtrowania rekordów po group by.
Utwórzmy tabelę dbo.Customer z poniższymi rekordami, a następnie napisz zapytanie, używając klauzuli Group by i Have.

Create table dbo.Customer
 (Id int,
  FName VARCHAR(50),
  LName VARCHAR(50),
  CountryShortName CHAR(2),
  SaleAmount Int)
GO
--Insert Rows in dbo.Customer Table
insert into dbo.Customer
Values (
1,'Raza','M','PK',10),
(2,'Rita','John','US',12),
(3,'Sukhi','Singh',Null,25),
(4,'James','Smith','CA',60),
(5,'Robert','Ladson','US',54),
(6,'Alice','John','US',87),
(6,'John',Null,'US',Null)
 
 
 Napiszmy naszą kwerendę, używając opcji Group by, a następnie użyj opcji Mając do filtrowania rekordu, w którym Sum(SaleAmount) jest większa niż 10.
SELECT countryshortname, 
       Sum(saleamount) SaleAmountByCountry 
FROM   dbo.customer 
GROUP  BY countryshortname 
HAVING Sum(saleamount) > 10 
 Jak filtrować zagregowane dane za pomocą klauzuli Have w SQL 


Demo wideo:Jak używać klauzuli o klauzuli w instrukcji SQL Select

 



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ROUND() Przykłady w SQL Server

  2. Sporadyczne awarie połączenia ODBC

  3. Chcę użyć instrukcji CASE do aktualizacji niektórych rekordów w serwerze sql 2005

  4. SQL Server 2016:Importuj dane

  5. Tabela kalendarza dla hurtowni danych