Oversigt :i denne øvelse lærer du, hvordan du bruger SQLite GROUP BY
klausul for at lave et sæt oversigtsrækker ud fra et sæt rækker.
Introduktion til SQLite GROUP BY
klausul
GROUP BY
klausul er en valgfri klausul af SELECT
udmelding. GROUP BY
klausuler en valgt gruppe rækker til opsummeringsrækker efter værdier af en eller flere kolonner.
GROUP BY
klausul returnerer en række for hver gruppe. For hver gruppe kan du anvende en aggregeret funktion såsom MIN
, MAX
, SUM
, COUNT
eller AVG
for at give flere oplysninger om hver gruppe.
Følgende sætning illustrerer syntaksen for SQLite GROUP BY
klausul.
SELECT
column_1,
aggregate_function(column_2)
FROM
table
GROUP BY
column_1,
column_2;
Code language: SQL (Structured Query Language) (sql)
Prøv det
GROUP BY
klausulen kommer efter FROM
klausul af SELECT
udmelding. Hvis en sætning indeholder en WHERE
klausulen, GROUP BY
klausulen skal komme efter WHERE
klausul.
Efter GROUP BY
klausul er en kolonne eller en liste over kommaseparerede kolonner, der bruges til at angive gruppen.
SQLite GROUP BY
eksempler
Vi bruger tracks
tabel fra prøvedatabasen til demonstrationen.
SQLite GROUP BY
klausul med COUNT
funktion
Følgende erklæring returnerer album-id'et og antallet af numre pr. album. Den bruger GROUP BY
klausul for at gruppere numre efter album og anvende COUNT()
funktion til hver gruppe.
SELECT
albumid,
COUNT(trackid)
FROM
tracks
GROUP BY
albumid;
Code language: SQL (Structured Query Language) (sql)
Prøv det
Du kan bruge ORDER BY
klausul for at sortere grupperne som følger:
SELECT
albumid,
COUNT(trackid)
FROM
tracks
GROUP BY
albumid
ORDER BY COUNT(trackid) DESC;
Code language: SQL (Structured Query Language) (sql)
Prøv det
SQLite GROUP BY
og INNER JOIN
klausul
Du kan forespørge data fra flere tabeller ved hjælp af INNER JOIN
klausul, og brug derefter GROUP BY
klausul for at gruppere rækker i et sæt oversigtsrækker.
For eksempel forbinder følgende sætning tracks
tabel med albums
tabel for at få albummets titler og bruger GROUP BY
klausul med COUNT
funktion for at få antallet af numre pr. album.
SELECT
tracks.albumid,
title,
COUNT(trackid)
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
GROUP BY
tracks.albumid;
Code language: SQL (Structured Query Language) (sql)
Prøv det
SQLite GROUP BY
med HAVING
klausul
For at filtrere grupper bruger du GROUP BY
med HAVING
klausul. For at få de album, der har mere end 15 numre, bruger du f.eks. følgende sætning:
SELECT
tracks.albumid,
title,
COUNT(trackid)
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
GROUP BY
tracks.albumid
HAVING COUNT(trackid) > 15;
Code language: SQL (Structured Query Language) (sql)
Prøv det
SQLite GROUP BY
klausul med SUM
funktionseksempel
Du kan bruge SUM
funktion til at beregne total pr. gruppe. For eksempel, for at få samlet længde og bytes for hvert album, bruger du SUM
funktion til at beregne det samlede antal millisekunder og bytes.
SELECT
albumid,
SUM(milliseconds) length,
SUM(bytes) size
FROM
tracks
GROUP BY
albumid;
Code language: SQL (Structured Query Language) (sql)
Prøv det
SQLite GROUP BY
med MAX
, MIN
og AVG
funktioner
Følgende sætning returnerer album-id, albumtitel, maksimumlængde, minimumlængde og den gennemsnitlige længde af spor i tracks
tabel.
SELECT
tracks.albumid,
title,
min(milliseconds),
max(milliseconds),
round(avg(milliseconds),2)
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
GROUP BY
tracks.albumid;
Code language: SQL (Structured Query Language) (sql)
Prøv det
SQLite GROUP BY
eksempel på flere kolonner
I det foregående eksempel har vi brugt en kolonne i GROUP BY
klausul. SQLite giver dig mulighed for at gruppere rækker efter flere kolonner.
For at gruppere numre efter medietype og genre bruger du f.eks. følgende sætning:
SELECT
MediaTypeId,
GenreId,
COUNT(TrackId)
FROM
tracks
GROUP BY
MediaTypeId,
GenreId;
Code language: SQL (Structured Query Language) (sql)
Prøv det
SQLite bruger kombinationen af værdier af MediaTypeId
og GenreId
kolonner som en gruppe, f.eks. (1,1) og (1,2). Den anvender derefter COUNT
funktion for at returnere antallet af spor i hver gruppe.
SQLite GROUP BY
dato eksempel
Se følgende fakturatabel fra eksempeldatabasen:
Følgende opgørelse returnerer antallet af fakturaer efter år.
SELECT
STRFTIME('%Y', InvoiceDate) InvoiceYear,
COUNT(InvoiceId) InvoiceCount
FROM
invoices
GROUP BY
STRFTIME('%Y', InvoiceDate)
ORDER BY
InvoiceYear;
Code language: SQL (Structured Query Language) (sql)
Her er outputtet:
I dette eksempel:
- Funktionen
STRFTIME('%Y', InvoiceDate)
returnerer et år fra en datostreng. GROUP BY
klausul grupperer fakturaerne efter år.- Funktionen
COUNT()
returnerer antallet af fakturaer i hvert år (eller gruppe).
I denne øvelse har du lært, hvordan du bruger SQLite GROUP BY
klausul for at gruppere rækker i et sæt oversigtsrækker.