- 1 1. Sissejuhatus: GROUP BY ülevaade
- 2 2. GROUP BY põhiline kasutamine
- 3 3. GROUP BY ja agregeerimisfunktsioonid
- 4 4. Andmete filtreerimine HAVING klausliga
- 5 5. GROUP BY koos ORDER BY-ga
- 6 6. Täpsem GROUP BY kasutamine: WITH ROLLUP
- 7 7. GROUP BY ja DISTINCT erinevused
- 8 8. GROUP BY jõudluse optimeerimine MySQL-is
- 9 9. Kokkuvõte: GROUP BY tõhus kasutamine
1. Sissejuhatus: GROUP BY ülevaade
Kui töötate andmebaasis suure hulga andmetega, on tõhusaks koondamiseks ja korrastamiseks võimas tööriist GROUP BY klausel. GROUP BY rühmitab andmed kindla veeru alusel ja võimaldab teha koondarvutusi iga rühma kohta. Näiteks, kui soovite arvutada müügitulu igas tootekategoorias, saate selle klausliga andmed hõlpsasti kätte.
GROUP BY kasutamine võimaldab andmeid korrastada visuaalselt arusaadaval viisil ning rakendada agregeerimisfunktsioone (SUM
, COUNT
, AVG
jne), et teha põhjalikumat analüüsi.
2. GROUP BY põhiline kasutamine
GROUP BY klausel rühmitab andmed määratud veeru järgi ja arvutab kokkuvõtte iga rühma kohta. See võimaldab lihtsalt saada statistikat ja kokkuvõtteid teatud kategooriate või tingimuste alusel.
Põhisüntaks
SELECT veeru_nimi, agregeerimisfunktsioon(veeru_nimi)
FROM tabeli_nimi
GROUP BY veeru_nimi;
Näide
Kui soovite arvutada müügitulu tootekategooriate kaupa, kasutage järgmist päringut:
SELECT product_category, SUM(sales_amount)
FROM sales
GROUP BY product_category;
See päring tagastab iga tootekategooria kogumüügi.
Näidisandmed
product_category | SUM(sales_amount) |
---|---|
Elektroonika | 100,000 |
Toit | 50,000 |
Rõivad | 75,000 |

3. GROUP BY ja agregeerimisfunktsioonid
Kombineerides GROUP BY klausli agregeerimisfunktsioonidega, saab andmed rühmitada ja arvutada statistikat iga rühma kohta. MySQL-is kasutatakse sageli järgmisi funktsioone:
- SUM(): arvutab arvandmete summa.
- COUNT(): loendab kirjed.
- AVG(): arvutab arvandmete keskmise.
- MAX(): leiab maksimaalse väärtuse.
- MIN(): leiab minimaalse väärtuse.
Näidis-päring
Näiteks, kui soovite saada müügitulu ja müügitehingute arvu tootekategooriate kaupa:
SELECT product_category, SUM(sales_amount), COUNT(*)
FROM sales
GROUP BY product_category;
See päring tagastab iga product_category
müügitulu ja müükide arvu.
4. Andmete filtreerimine HAVING klausliga
HAVING klauslit kasutatakse GROUP BY tulemustes tingimuste seadmiseks. Erinevalt WHERE klauslist, mis filtreerib enne koondamist, töötab HAVING koondatud andmete peal. See võimaldab filtreerida rühmi agregeeritud väärtuste alusel.
Näide
Kui soovite kuvada ainult kategooriad, mille kogumüük ületab 1000:
SELECT product_category, SUM(sales_amount)
FROM sales
GROUP BY product_category
HAVING SUM(sales_amount) > 1000;
See päring tagastab ainult need kategooriad, mille kogumüük on üle 1000.

5. GROUP BY koos ORDER BY-ga
Pärast andmete rühmitamist saab tulemusi järjestada ORDER BY klausliga. ORDER BY võimaldab sorteerida tulemusi kasvavas (ASC
) või kahanevas (DESC
) järjekorras.
Näide
Kui soovite sorteerida kategooriad kogumüügi kahanevas järjekorras:
SELECT product_category, SUM(sales_amount)
FROM sales
GROUP BY product_category
ORDER BY SUM(sales_amount) DESC;
See päring kuvab kategooriad alates suurimast müügitulust.
6. Täpsem GROUP BY kasutamine: WITH ROLLUP
WITH ROLLUP lisab tulemuste hulka kogusummad. See tähendab, et lisaks igale rühmale arvutatakse ka üldsumma. Väga kasulik aruannete ja kokkuvõtete koostamisel.
Näide
Kui soovite näha iga linna kogumüüki ja kogusummat:
SELECT city, SUM(sales_amount)
FROM sales
GROUP BY city WITH ROLLUP;
See päring näitab iga linna müüki ja kogu kogumüüki.

7. GROUP BY ja DISTINCT erinevused
DISTINCT ja GROUP BY korrastavad andmeid, kuid erineval viisil. DISTINCT eemaldab duplikaadid, GROUP BY aga rühmitab ja arvutab koondväärtused.
Võrdlevad näited
Näide DISTINCT kasutamisest tootekategooriate unikaalse loendi saamiseks:
SELECT DISTINCT product_category
FROM sales;
Näide GROUP BY kasutamisest müükide arvu arvutamiseks kategooriate kaupa:
SELECT product_category, COUNT(*)
FROM sales
GROUP BY product_category;
DISTINCT eemaldab duplikaadid, GROUP BY aga arvutab statistikat.
8. GROUP BY jõudluse optimeerimine MySQL-is
Suurte andmehulkadega töötamisel on GROUP BY päringute optimeerimine väga oluline. Efektiivseks töötlemiseks tuleb kasutada õigeid seadistusi ja optimeeritud päringuid.
1. Indeksite kasutamine
Indeksi lisamine GROUP BY kasutatavatele veergudele kiirendab rühmitamist ja otsingut.
CREATE INDEX idx_category ON sales(product_category);
2. Mälu seadete kohandamine
MySQL-i mäluparameetrite (nt sort_buffer_size
, tmp_table_size
) optimeerimine parandab päringute jõudlust.
SET GLOBAL sort_buffer_size = 2M;
SET GLOBAL tmp_table_size = 64M;
3. Päringute lihtsustamine
Liiga keerulised päringud aeglustavad töötlemist. Kasutage ainult vajalikke veerge ja tingimusi.
4. MySQL versioonispetsiifilised funktsioonid
Alates MySQL 8.0-st on saadaval hash-põhine rühmitamine, mis on suurte andmete puhul kiirem kui sorteerimispõhine töötlemine.
SET optimizer_switch = 'hash_join=on';
5. Päringute vahemälu kasutamine
MySQL 5.7 ja vanemate versioonide puhul saab kasutada query cache’i korduvate päringute kiirendamiseks.
SET GLOBAL query_cache_size = 16M;
SET GLOBAL query_cache_type = 1;
6. Partitsioneerimise kasutamine
Partitsioneerimine võimaldab jaotada suured tabelid väiksemateks osadeks, et parandada töötlemise kiirust.
ALTER TABLE sales PARTITION BY RANGE (YEAR(sale_date)) (
PARTITION p0 VALUES LESS THAN (2021),
PARTITION p1 VALUES LESS THAN (2022),
PARTITION p2 VALUES LESS THAN (2023)
);
9. Kokkuvõte: GROUP BY tõhus kasutamine
GROUP BY on võimas SQL klausel, mis võimaldab rühmitada andmeid ja teha koondarvutusi. Selles artiklis õppisite põhilised kasutusviisid, HAVING ja ORDER BY kombinatsioonid, samuti edasijõudnud funktsioonid nagu WITH ROLLUP. Lisaks käsitlesime jõudluse optimeerimist indeksite, mälu seadete ja MySQL versioonipõhiste funktsioonide abil.
Kasutades ka partitsioneerimist ja vahemälu, saate töödelda suuri andmehulkasid tõhusamalt. Optimeerige päringud ja seadistused vastavalt vajadusele, et parandada andmeanalüüsi kiirust ja töökindlust.