Använd vänsterpil och högerpil för att navigera

Eller Ctrl+P för att skriva ut till PDF (eller på papper)

Aggregering

GROUP BY och HAVING

Aggregatfunktioner

Vår data

Person
Name Profession Salary
Peter programmer 40000
Samir programmer 35000
Michael programmer 35000
Milton programmer 0
Bill manager 55000
Bob manager 45000
Lawrence construction worker 20000
Joanna waitress 20000

Felaktig aggregering

  1. SELECT * FROM Person GROUP BY Profession
  2. Column 'Person.Name' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Varje yrke

  1. SELECT Profession FROM Person GROUP BY Profession
Person
Profession
programmer
manager
construction worker
waitress

Genomsnittslön för varje yrke

  1. SELECT Profession, AVG(Salary) FROM Person GROUP BY Profession
Person
ProfessionAVG(Salary)
construction worker20000
manager50000
programmer27500
waitress20000

Flera kolumner i gruppering

  1. SELECT Company, Profession, AVG(Salary) FROM Person GROUP BY Profession, Company
Person
CompanyProfessionAVG(Salary)
Champion Constructionconstruction worker20000
Chotchkie'swaitress20000
Initechmanager50000
Initechprogrammer27500
Microsoftprogrammer45000

HAVING

Exempel

  1. SELECT Profession, AVG(Salary)
  2. FROM Person
  3. GROUP BY Profession
  4. HAVING AVG(Salary) > 40000
Person
ProfessionAVG(Salary)
manager50000

WHERE och HAVING

  1. SELECT Profession, AVG(Salary)
  2. FROM Person
  3. WHERE Salary > 0
  4. GROUP BY Profession
  5. HAVING AVG(Salary) > 40000
Person
ProfessionAVG(Salary)
manager50000
programmer40833

Aggregatfunktioner

GROUP BY med joins

Country
IDName
1Sweden
2Germany
City
IDNameCountryID
1Stockholm1
2Gothenburg1
3Malmö1
4Berlin2
5Munich2
  1. SELECT *
  2. FROM Country
  3. JOIN City ON Country.ID = City.CountryID
IDNameIDNameCountryID
1Sweden1Stockholm1
1Sweden2Gothenburg1
1Sweden3Malmö1
2Germany4Berlin2
2Germany5Munich2

GROUP BY med joins och ID

  1. SELECT Country.ID, COUNT(*)
  2. FROM Country
  3. JOIN City ON Country.ID = City.CountryID
  4. GROUP BY Country.ID
IDCOUNT(*)
13
22

GROUP BY med joins och namn

  1. SELECT Country.Name, COUNT(*)
  2. FROM Country
  3. JOIN City ON Country.ID = City.CountryID
  4. GROUP BY Country.ID
  5. Column 'Country.Name' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

GROUP BY med joins fler grupperingskolumner

  1. SELECT Country.Name, COUNT(*)
  2. FROM Country
  3. JOIN City ON Country.ID = City.CountryID
  4. GROUP BY Country.ID, Country.Name
IDCOUNT(*)
Sweden3
Germany2

GROUP BY med joins och annan grupperingskolumn

  1. SELECT Country.Name, COUNT(*)
  2. FROM Country
  3. JOIN City ON Country.ID = City.CountryID
  4. GROUP BY Country.Name
IDCOUNT(*)
Sweden3
Germany2