SQL skaitīšanas grupa pēc piemēriem. ATLASĪT komandu GROUP BY BY

Šajā rakstā es jums pastāstīšu, kā dati tiek grupēti, kā pareizi lietot SQL vaicājumus pēc grupas un, izmantojot vairāku vaicājumu piemēru.

Lielākā daļa informācijas datu bāzēs tiek glabāta detalizētā formā. Tomēr bieži vien ir jāsaņem ziņojumi. Piemēram, uzziniet kopējo lietotāju komentāru skaitu vai, iespējams, preču daudzumu noliktavās. Ir daudz līdzīgu uzdevumu. Tāpēc SQL valoda šādiem gadījumiem īpaši paredz grupu pēc un kam ir konstrukcijas, kas ļauj attiecīgi grupēt un filtrēt iegūtās datu grupas.

Tomēr to izmantošana rada daudzas problēmas iesācējiem programmatūras darbu autoriem. Viņi ne visai pareizi interpretē iegūtos rezultātus un pašu datu grupēšanas mehānismu. Tāpēc izdomāsim praksē, kas un kā notiek.

Piemēra vajadzībām es apskatīšu tikai vienu tabulu. Iemesls ir vienkāršs, šie operatori jau tiek lietoti iegūtajam datu paraugam (pēc tabulas rindu apvienošanas un filtrēšanas). Tātad, pievienojot kur un join operatorus, būtība nemainīsies.

Iedomāsimies abstraktu piemēru. Pieņemsim, ka jums ir foruma lietotāju kopsavilkuma tabula. Sauksim to par userstat, un tas izskatās šādi. Svarīgs punkts, mēs uzskatām, ka lietotājs var piederēt tikai vienai grupai.

user_name - lietotājvārds

forum_group - grupas nosaukums

mess_count - ziņojumu skaits

is_have_social_profile — vai foruma profilā ir saite uz kādu sociālā tīkla lapu

Kā redzat, tabula ir vienkārša, un daudzas lietas varat aprēķināt pats, izmantojot kalkulatoru. Tomēr šis ir tikai piemērs, un tajā ir tikai 10 ieraksti. Reālās datubāzēs ierakstus var mērīt tūkstošos. Tātad, sāksim ar vaicājumiem.

Tīra grupēšana, izmantojot grupu pēc

Iedomāsimies, ka mums ir jāzina katras grupas vērtība, proti, vidējais lietotāju vērtējums grupā un kopējais forumā atstāto ziņojumu skaits.

Pirmkārt, īss verbāls apraksts, lai būtu vieglāk saprast SQL vaicājumu. Tātad, jums ir jāatrod aprēķinātās vērtības pēc forumu grupām. Attiecīgi visas šīs desmit rindas ir jāsadala trīs dažādās grupās: administrators, moderators, lietotājs. Lai to izdarītu, pieprasījuma beigās ir jāpievieno grupēšana pēc lauka forum_group vērtībām. Un arī pievienojiet aprēķinātās izteiksmes, lai atlasītu, izmantojot tā sauktās apkopotās funkcijas.

Norādiet laukus un aprēķinātās kolonnas atlasiet forum_group, avg(rating) kā avg_rating, sum(mess_count) kā total_mess_count -- Norādiet tabulu no userstat -- Norādiet grupēšanu pēc lauku grupas pēc foruma_grupas

Lūdzu, ņemiet vērā, ka pēc tam, kad vaicājumā esat izmantojis grupu pēc konstrukcijas, atlasē varat izmantot tikai tos laukus, kas tika norādīti pēc grupas, neizmantojot apkopošanas funkcijas. Pārējie lauki ir jānorāda apkopotajās funkcijās.

Es izmantoju arī divas apkopošanas funkcijas. AVG - aprēķina vidējo vērtību. Un SUM - aprēķina summu.

forums_grupavid._vērtējumskopējais_netīrumu_skaits
admin 4 50
moderators 3 50
lietotājs 3 150

1. Pirmkārt, visas avota tabulas rindas tika sadalītas trīs grupās atbilstoši lauka forum_group vērtībām. Piemēram, administratoru grupā bija trīs lietotāji. Modera iekšpusē ir arī 3 rindas. Un lietotāju grupā bija 4 rindas (četri lietotāji).

2. Pēc tam katrai grupai tika piemērotas apkopotās funkcijas. Piemēram, administratoru grupai vidējais vērtējums tika aprēķināts šādi (2 + 5 + 5)/3 = 4. Ziņojumu skaits tika aprēķināts kā (10 + 15 + 25) = 50.

Kā redzat, nekas sarežģīts. Tomēr mēs izmantojām tikai vienu grupēšanas nosacījumu un nefiltrējām pēc grupas. Tātad, pāriesim pie nākamā piemēra.

Grupēšana, izmantojot grupu pēc, un grupu filtrēšana ar have

Tagad apskatīsim sarežģītāku datu grupēšanas piemēru. Pieņemsim, ka mums ir jānovērtē darbību efektivitāte, lai piesaistītu lietotājus sociālajām aktivitātēm. Vienkārši sakot, uzziniet, cik lietotāju grupās atstāja saites uz saviem profiliem un cik ignorēja sūtījumus utt. Tomēr reālajā dzīvē šādu grupu var būt daudz, tāpēc mums ir jāizfiltrē tās grupas, kuras var atstāt novārtā (piemēram, pārāk maz cilvēku neatstāja saiti; kāpēc pārblīvēt pilnu pārskatu). Manā piemērā tās ir grupas, kurās ir tikai viens lietotājs.

Pirmkārt, mēs mutiski aprakstīsim, kas jādara SQL vaicājumā. Mums ir jāsadala visas sākotnējās lietotāju statistikas tabulas rindas atbilstoši šādiem kritērijiem: grupas nosaukums un sociālā profila klātbūtne. Attiecīgi ir nepieciešams grupēt tabulas datus pēc laukiem forum_group un is_have_social_profile. Taču mūs neinteresē tās grupas, kur ir tikai viens cilvēks. Tāpēc šādas grupas ir jāfiltrē.

Piezīme: Ir vērts zināt, ka šo problēmu varētu atrisināt, grupējot tikai pēc viena lauka. Ja izmantojat korpusa konstrukciju. Taču šī piemēra ietvaros ir parādītas grupēšanas iespējas.

Es vēlētos arī nekavējoties precizēt vienu svarīgu punktu. Izmantojot apkopotās funkcijas, varat filtrēt tikai, izmantojot ņemot, nevis pēc atsevišķiem laukiem. Citiem vārdiem sakot, šī nav konstrukcija, kur tā ir filtrs rindu grupām, nevis atsevišķiem ierakstiem. Lai gan nosacījumi iekšpusē ir norādīti līdzīgā veidā, izmantojot "vai" un "un".

Šādi izskatītos SQL vaicājums

Norādiet laukus un aprēķinātās kolonnas atlasiet forum_group, is_have_social_profile, count(*) kā kopā -- Norādiet tabulu no userstat -- Norādiet grupēšanu pēc laukiem grupa pēc foruma_grupas, is_have_social_profile -- Norādiet grupas filtru ar count(*) > 1

Lūdzu, ņemiet vērā, ka lauki aiz grupas pēc konstrukcijas ir atdalīti ar komatiem. Lauku norādīšana atlasē notiek tāpat kā iepriekšējā piemērā. Es izmantoju arī apkopoto funkciju skaitu, kas aprēķina rindu skaitu grupās.

Lūk, rezultāts:

forums_grupair_ir_sociālais_profilsKopā
admin 1 2
moderators 1 2
lietotājs 0 3

Apskatīsim soli pa solim, kā radās šis rezultāts.

1. Sākotnēji tika iegūtas 6 grupas. Katra no forum_group grupām tika sadalīta divās apakšgrupās, pamatojoties uz lauka is_have_social_profile vērtībām. Citiem vārdiem sakot, grupas: , , , , , .

Piezīme: Starp citu, nav obligāti jābūt 6 grupām. Tātad, piemēram, ja visi administratori aizpildītu profilu, tad būtu 5 grupas, jo laukam is_have_social_profile būtu tikai viena vērtība administratoru grupas lietotājiem.

2. Pēc tam katrai grupai tika piemērots filtra nosacījums. Tāpēc tika izslēgtas šādas grupas: , , . Tā kā katrā šādā grupā bija tikai viena avota tabulas rinda.

3. Pēc tam tika aprēķināti nepieciešamie dati un iegūts rezultāts.

Kā redzat, lietošanā nav nekā sarežģīta.

Ir vērts zināt, ka atkarībā no datu bāzes šo konstrukciju iespējas var atšķirties. Piemēram, var būt vairāk apkopojošu funkciju vai arī kā grupu varat norādīt aprēķinātās kolonnas, nevis atsevišķus laukus. Šī informācija jau ir jāskatās specifikācijā.

Tagad jūs zināt, kā grupēt datus, izmantojot grupu pēc, kā arī kā filtrēt grupas, izmantojot ņemot.


Viena no svarīgākajām komandām SQL ir GROUP BY. Šī konstrukcija ir paredzēta, lai no tabulas atlasītu atsevišķas rindu grupas, kurām katrai ir norādītas funkcijas ATLASĪT(Piemēram, COUNT(), MIN() un tā tālāk). Apskatīsim konkrētus piemērus.

Pieņemsim, ka mums ir lielveikalu tabula:

  • id- unikāls identifikators.
  • veikala_id- lielveikala unikālais identifikators.
  • cena- piena cena.

Mums ir jānoskaidro vidējā piena cena katrā lielveikalā. pieraksti to veikala_id var atkārtoties (galu galā ir lielveikalu ķēdes). Tāpēc mums ir jāveido grupa saskaņā ar veikala_id, un katrai šīs grupas rindai aprēķiniet vidējo cenu.

Sākotnējā tabula izskatās šādi:

Tādējādi mēs uzzinājām vidējo cenu konkrētā lielveikalu ķēdē (vai vienā veikalā).

Vēl viens ļoti izplatīts lietojums ir unikālu ierakstu izgūšana no tabulām. Iepriekšējā piemērā pamanījāt, ka iegūtajā paraugā nav dublikātu veikala_id, savukārt sākotnējā tabulā tie bija.

Pieņemsim, ka mums ir tabula ar lietotājiem:

  • id- unikāls identifikators.
  • e-pasts - e-pasts lietotājs.
  • hash- unikāla lietotāja hash.

Un mēs saskārāmies ar uzdevumu izvēlēties unikālie lietotāji, un īpaši unikāli cilvēki, nevis unikāli konti. Galu galā vienam cilvēkam var būt 100 konti ar dažādiem e-pasts un protams, id. A hash- šī ir noteikta līnija, kas raksturo viņu kā unikālu cilvēku.

Tāpēc mums ir jāizvēlas visi ieraksti ar unikālu jaucējkodu. Šim nolūkam tas atkal tiek izmantots GROUP BY:

SELECT * FROM "table" GROUP BY "hash".

Rezultātā tiks iegūti tikai unikālie hash, tas ir 2 identisks hash Jūs to neredzēsit iegūtajā paraugā.

Šeit ir divi praktiski GROUP BY izmantošanas piemērs SQL mēs to sakārtojām.

Mēs esam izskatījuši daudz materiālu par SQL, jo īpaši Transact-SQL, taču mēs nepieskārāmies tik vienkāršai tēmai kā datu grupēšana GROUP BY. Tāpēc šodien mēs uzzināsim, kā datu grupēšanai izmantot grupu pēc operatora.

Daudzi iesācēju programmētāji, saskaroties ar SQL, nezina par tādu iespēju kā datu grupēšana, izmantojot operatoru GROUP BY, lai gan praksē šī funkcija ir nepieciešama diezgan bieži, šajā sakarā mūsu šodienas nodarbība, kā parasti ar piemēriem, ir veltīta. uz Jums bija vienkāršāk un vieglāk iemācīties lietot šo operatoru, jo jūs noteikti ar to saskarsities. Ja jūs interesē SQL tēma, tad, kā jau teicu iepriekš, mēs tai esam pieskārušies vairāk nekā vienu reizi, piemēram, rakstos SQL valoda - JOIN vai Union and union all, lai jūs varētu iepazīties ar šo materiālu. .

Un ievadam nedaudz teorijas.

Kas ir GROUP BY operators

GROUP BY ir operators ( vai dizains, kurš jums ir ērtāks) SQL datu grupēšanai pēc lauka, ja vaicājumā izmanto apkopotās funkcijas, piemēram, summa, max, min, count un citas.

Kā jūs zināt, apkopotās funkcijas darbojas ar vērtību kopu, piemēram, summa summē visas vērtības. Bet pieņemsim, ka jums ir nepieciešams summēt pēc dažiem nosacījumiem vai vairākiem nosacījumiem vienlaikus, tāpēc mums ir nepieciešama grupa pēc operatora, lai grupētu visus datus pēc laukiem ar apkopoto funkciju rezultātu izvadi.

Man šķiet, ka to visu būs skaidrāk analizēt ar piemēriem, tāpēc pāriesim pie piemēriem.

Piezīme! Mēs rakstīsim visus piemērus programmā Management Studio SQL Server 2008.

Operatora GROUP BY izmantošanas piemēri

Vispirms izveidosim un aizpildīsim testa tabulu ar datiem, uz kuriem mēs nosūtīsim atlasītos vaicājumus, izmantojot grupu pēc. Tabula un dati, protams, ir fiktīvi, piemēram, tīri.

Izveidojiet tabulu

IZVEIDOT TABULU . (NULL, (50) NULL, NULL, NULL) CEĻĀM

Es to aizpildīju ar šādu informāciju:

  • Id – ieraksta identifikators;
  • Vārds – darbinieka uzvārds;
  • Summa - skaidra nauda;
  • Balva ir līdzekļu zīme (piemēram, 1-Alga; 2-Bonuss).

Datu grupēšana, izmantojot grupu pēc vaicājuma

Un pašā sākumā apskatīsim sintaksi grupēt pēc, t.i. kur rakstīt šo konstrukciju:

Sintakse:

Izvēlieties agregētās funkcijas

No avots

Kur Atlases nosacījumi

Grupēt pēc grupēšanas lauki

Ņemot Agregātu funkciju nosacījumi

Sakārtot pēc kārtot laukus

Tagad, ja mums ir jāapkopo visi konkrētā darbinieka līdzekļi, neizmantojot grupēšanu, mēs nosūtīsim šādu pieprasījumu:

SELECT SUM(summa)kā summa FROM test_table WHERE name = "Ivanov"

Un, ja mums ir nepieciešams summēt citu darbinieku, mēs vienkārši mainām nosacījumu. Piekrītu, ja šādu darbinieku ir daudz, kāpēc apkopot katru, un tas kaut kā nav skaidrs, tāpēc mums talkā nāk grupa pēc operatora. Mēs rakstām pieprasījumu:

SELECT SUM(summa) kā summa, nosaukums FROM test_table GROUP BY nosaukums

Kā pamanījāt, nosacījumus nerakstām, un visus darbiniekus attēlojam uzreiz ar summēto līdzekļu summu, kas ir skaidrāk.

Piezīme! Uzreiz atzīmēšu, ka papildus apkopotajām funkcijām mēs grupā ierakstām vienādu lauku skaitu pēc konstrukcijas atkarībā no tā, cik lauku ierakstām pieprasījumā (t.i., grupējam laukus). Mūsu piemērā mēs attēlojam vienu lauku, tāpēc grupā pēc mēs norādījām tikai vienu lauku (nosaukums), ja parādītu vairākus laukus, tad tie visi būtu jānorāda grupā pēc konstrukcijas (to redzēsiet tālāk); piemēri).

Var izmantot arī citas funkcijas, piemēram, ar kopējo saņemto līdzekļu summu saskaitīt, cik reizes konkrētajam darbiniekam saņemti līdzekļi. Lai to izdarītu, papildus summas funkcijai mēs izmantosim arī skaitīšanas funkciju.

SELECT SUM(summa) kā [Kopējie līdzekļi], COUNT(*) kā [Kvītu skaits], Vārds [Darbinieks] FROM test_table GROUP BY name

Bet pieņemsim, ka iestādēm ar to nepietiek, viņi arī lūdz to summēt tāpat, bet ar grupēšanu pēc atribūtiem, t.i. kāda veida nauda tā ir (alga vai prēmija), par to mēs vienkārši pievienojam grupēšanai vēl vienu lauku un labākai izpratnei pievienosim šķirošanu pēc darbinieka, un rezultāts būs šāds:

SELECT SUM(summa) kā [Kopējie līdzekļi], COUNT(*) kā [Kvītu skaits], Vārds [Darbinieks] , Balva [Avots] FROM test_table GROUP BY BY, balva ORDER BY

Tagad tiek parādīts viss, t.i. cik daudz naudas ir saņēmis darbinieks, cik reizes un no kāda avota.

Tagad, lai konsolidētu, uzrakstīsim vēl sarežģītāku vaicājumu ar grupēšanu, bet pievienosim arī šī avota nosaukumus, jo piekritīsit, ka, pamatojoties uz atribūtu identifikatoriem, nav skaidrs, no kura avota ir iegūti līdzekļi. Šim nolūkam mēs izmantojam konstrukciju lietu.

SELECT SUM(summa) AS [Kopā nauda], SKAITS(*) AS [Kvītu skaits], Vārds [Darbinieks], CASE WHEN balva = 1, tad "Alga", WHEN balva = 2, tad "Bonuss" ELSE "Nav avota" END AS [Avots] NO test_table GROUP BY, balva ORDER BY

Tagad viss ir diezgan skaidrs un nav tik grūti, pat iesācējiem.

Pieskarsimies arī summāro funkciju gala rezultātu nosacījumiem ( kam). Citiem vārdiem sakot, mēs pievienojam nosacījumu nevis pašu rindu atlasei, bet gan funkciju galīgajai vērtībai, mūsu gadījumā tā ir summa vai skaits. Piemēram, mums ir jāparāda tas pats, bet tikai tie, kuriem ir "kopējie līdzekļi" vairāk nekā 200. Lai to izdarītu, pievienojiet nosacījumu:

SELECT SUM(summa) kā [Kopā nauda], COUNT(*) kā [čeku skaits], vārds [darbinieks], CASE WHEN balva = 1, tad "Alga", WHEN balva = 2, tad "Bonuss" ELSE "Nav avota" END AS [Avots] NO testa_tabulas GRUPA PĒC nosaukuma, balva --group HAVING SUM(summa) > 200 --select ORDER BY name --sort

Tagad mēs esam parādījuši visas summas (summa) vērtības, kas ir lielākas par 200, viss ir vienkārši.

Es ceru, ka pēc šodienas nodarbības jūs sapratīsit, kā un kāpēc izmantot struktūru grupēt pēc. Veiksmi! Mēs turpināsim pētīt SQL turpmākajos rakstos.

Pēdējā atjaunināšana: 19.07.2017

T-SQL izmanto priekšrakstus GROUP BY un HAVING, lai grupētu datus, izmantojot šādu formālo sintaksi:

ATLASĪT kolonnas NO tabulas

GROUP BY

Klauzula GROUP BY nosaka, kā rindas tiks grupētas.

Piemēram, grupēsim produktus pēc ražotāja

IZVĒLĒTIES ražotāju, COUNT(*) AS ModeļiSkaits FROM Produkti GROUP BY Ražotājs

Pirmā kolonna priekšrakstā SELECT — ražotājs apzīmē grupas nosaukumu, bet otrā kolonna — ModelsCount ir funkcijas Count rezultāts, kas aprēķina rindu skaitu grupā.

Ir vērts apsvērt, ka jebkura kolonna, kas tiek izmantota priekšrakstā SELECT (neskaitot kolonnas, kurās tiek saglabāti apkopoto funkciju rezultāti), ir jānorāda aiz klauzulas GROUP BY. Tātad, piemēram, iepriekš minētajā gadījumā sleja Ražotājs ir norādīta gan klauzulā SELECT, gan GROUP BY.

Un, ja priekšraksts SELECT atlasa vienu vai vairākas kolonnas un izmanto arī apkopošanas funkcijas, jums ir jāizmanto klauzula GROUP BY. Tādējādi šis piemērs nedarbosies, jo tajā nav grupēšanas izteiksmes:

SELECT Manufacturer, COUNT(*) AS ModesCount FROM Products

Vēl viens piemērs, pievienosim grupējumu pēc produktu skaita:

ATLASĪT ražotāju, produktu skaits, COUNT(*) AS Modeļu skaits FROM Produkti GROUP BY Ražotājs, ProductCount

Klauzulu GROUP BY var grupēt vairākās kolonnās.

Ja kolonnā, kurā grupējat, ir NULL vērtība, rindas ar vērtību NULL veidos atsevišķu grupu.

Ņemiet vērā, ka klauzulai GROUP BY ir jābūt pēc WHERE, bet pirms klauzulas ORDER BY:

SELECT Ražotājs, COUNT(*) AS Modeļu skaits FROM Produkti WHERE Cena > 30000 GROUP BY Ražotājs PASŪTĪT PĒC Modeļu Skaits DESC

Grupu filtrēšana. ŅEMOT

Operators ŅEMOT nosaka, kuras grupas tiks iekļautas izvades rezultātā, tas ir, tas filtrē grupas.

HAVING lietošana daudzējādā ziņā ir līdzīga WHERE lietošanai. Rindu filtrēšanai izmanto tikai WHERE, grupu filtrēšanai izmanto HAVING.

Piemēram, atradīsim visas produktu grupas pēc ražotāja, kurām ir definēts vairāk nekā 1 modelis:

ATLASĪT ražotāju, SKAITS(*) AS Modeļu skaits NO Produktu GROUP BY Ražotājs IR SKAITS(*) > 1

Šajā gadījumā vienā komandā mēs varam izmantot WHERE un HAVING izteiksmes:

SELECT Ražotājs, COUNT(*) AS Modeļu skaits FROM Produkti WHERE Cena * ProductCount > 80000 GROUP BY Ražotājs HAVING COUNT(*) > 1

Tas ir, šajā gadījumā rindas vispirms tiek filtrētas: tiek atlasīti tie produkti, kuru kopējās izmaksas ir lielākas par 80 000, pēc tam atlasītās preces tiek grupētas pēc ražotāja. Un pēc tam tiek filtrētas pašas grupas - tiek atlasītas tās grupas, kurās ir vairāk nekā 1 modelis.

Ja ir nepieciešams kārtot, tad izteiksme ORDER BY nāk aiz izteiksmes HAVING:

SELECT Ražotājs, COUNT(*) AS modeļi, SUM(ProductCount) AS Vienības FROM Products WHERE Cena * ProductCount > 80000 GROUP BY Ražotājs HAVING SUM(ProductCount) > 2 ORDER BY Units DESC

Šajā gadījumā grupēšana tiek veikta pēc ražotāja, un tiek atlasīts arī modeļu skaits katram ražotājam (Modeļi) un visu šo modeļu kopējais produktu skaits (Vienības). Beigās grupas tiek sakārtotas pēc produktu skaita dilstošā secībā.

Šajā apmācībā jūs uzzināsit, kā izmantot SQL priekšrakstu GROUP BY ar sintaksi un piemēriem.

Apraksts

SQL GROUP BY klauzulu var izmantot priekšrakstā SELECT, lai apkopotu datus no vairākiem ierakstiem un grupētu rezultātus vienā vai vairākās kolonnās.

Sintakse

Sintakse GROUP BY priekšrakstam SQL ir:

Parametri vai argumenti

izteiksme1 , izteiksme2 , ... izteiksme_n Izteiksmes, kas nav iekapsulētas apkopotā funkcijā un ir jāiekļauj GROUP BY SQL vaicājuma beigās. aggregate_function Šī ir apkopojoša funkcija, piemēram, SUM, COUNT, MIN, MAX vai AVG. aggregate_expression Šī ir kolonna vai izteiksme, kurai tiks izmantota aggregate_function. tabulas Tabulas, no kurām vēlaties izgūt ierakstus. Klauzulā FROM ir jānorāda vismaz viena tabula. KUR nosacījumi Pēc izvēles. Šie ir nosacījumi, kas jāievēro, lai atlasītu ierakstus. ORDER BY izteiksmes Neobligāti. Izteiciens, ko izmanto, lai kārtotu ierakstus rezultātu kopā. Ja ir norādīta vairāk nekā viena izteiksme, vērtības ir jāatdala ar komatiem. ASC Pēc izvēles. ASC sakārto rezultātu kopu augošā secībā pēc izteiksmes . Šī ir noklusējuma darbība, ja nav norādīts neviens pārveidotājs. DESC Pēc izvēles. DESC sakārto rezultātu kopu dilstošā secībā pēc izteiksmes .

Piemērs — GROUP BY izmantošana ar funkciju SUM

Apskatīsim, kā izmantot GROUP BY ar funkciju SUM SQL.
Šajā piemērā mums ir darbinieku tabula ar šādiem datiem:

dept_id kopējās_algas
500 119500
501 113000

Šajā piemērā mēs izmantojām funkciju SUM, lai saskaitītu visas algas katram dept_id, un SUM(alga) rezultātam piešķīrām aizstājvārdu "kopējās_algas". Tā kā dept_id nav iekapsulēts funkcijā SUM, tas ir jānorāda klauzulā GROUP BY.

Piemērs — GROUP BY izmantošana ar funkciju COUNT

Apskatīsim, kā SQL izmantot klauzulu GROUP BY ar funkciju COUNT.

Šajā piemērā mums ir produktu tabula ar šādiem datiem:

Šajā piemērā mēs izmantojām funkciju COUNT, lai aprēķinātu total_products skaitu katram kategorijas_id, un kā funkcijas COUNT rezultātus norādījām aizstājvārdu "total_products". Mēs izslēdzām visas kategorijas_id vērtības, kas ir NULL, filtrējot tās klauzulā WHERE. Tā kā kategorijas_id nav iekapsulēts funkcijā COUNT, tas ir jānorāda klauzulā GROUP BY.

Piemērs — GROUP BY izmantošana ar funkciju MIN

Tagad apskatīsim, kā SQL izmantot klauzulu GROUP BY ar funkciju MIN.

Šajā piemērā mēs atkal izmantosim darbinieku tabulu ar šādiem datiem:

Tiks atlasīti 2 ieraksti. Šeit ir rezultāti, ko iegūsit:

dept_id zemākā_alga
500 57500
501 42000

Šajā piemērā mēs izmantojām funkciju MIN, lai atgrieztu zemākās algas vērtību katram dept_id, un mēs aizstājām MIN funkcijas "zemākā_alga" rezultātus. Tā kā dept_id nav iekapsulēts funkcijā MIN, tas ir jānorāda klauzulā GROUP BY.

Piemērs — GROUP BY izmantošana ar funkciju MAX

Visbeidzot, apskatīsim, kā izmantot klauzulu GROUP BY ar funkciju MAX.

Atkal izmantosim darbinieku tabulu, bet šoreiz atrodiet lielāko algu katram dept_id:

darbinieka numurs vārds uzvārds algu dept_id
1001 Džastins Bībers 62000 500
1002 Selēna Gomess 57500 500
1003 Mila Kunis 71000 501
1004 Toms Kruīzs 42000 501

Ievadiet šādu SQL priekšrakstu.



Dalīties