Home > SQL-tecaj > SQL Lekcija 9 – ORDER BY – GROUP BY – HAVING

SQL Lekcija 9 – ORDER BY – GROUP BY – HAVING

Prosinac 26th, 2008

ORDER BY – GROUP BY – HAVING

Ove tri nove komande spadaju u istu grupu komandi kao i WHERE (vidi lekciju br. 4) komanda, tj. spada u tzv. klausule. Ali posto je WHERE komanda najjednostavnija od njih i u svakom slucaju najpotrebnija i puno cesce se koristi, ona je objasnjena u posebnoj lekciji.

 
A sad da predjemo na nase komande.

 

ORDER BY

 
ORDER BY sortira prikaz podataka jedne tabele (koji naravno pomocu komande SELECT pravite – vidi
lekciju br. 2
). To sortiranje se vrsi po kolumnama. Vi mozete kao u nasem primjeru (tabela polovnih
automobila Auto1) da sortirate sve Vase rezultate po Proizvodjacu, Modelu, Boji, Godistu ili Vlasniku. I
to mozete raditi na dva macina, ali to ce te vidjeti na prakticnim primjerima.

 
Ovo je nasa tabela:

 

Proizvodjac Model Boja Godiste Vlasnik
VW Golf GTI 2000 Plava 1986 Ime1 Prezime1
Mercedes 190 C Siva 1991 Ime1 Prezime1
Ford Sierra 2.0 Crvane 1986 Ime2 Prezime2

A ovo je komanda :

 

SELECT *
FROM Auto1
ORDER BY Boja
;

 
Ova nasa komanda govori nam da rezultat (* = svi podaci iz tabele) treba da bude sortiran po boji.

 
I rezultat izgleda ovako:

 

Proizvodjac Model Boja Godiste Vlasnik
Ford Sierra 2.0 Crvane 1986 Ime2 Prezime2
VW Golf GTI 2000 Plava 1986 Ime1 Prezime1
Mercedes 190 C Siva 1991 Ime1 Prezime1

Kao sto vidite, redoslije se promjenio u odnosu na nasu orginalnu tabelu.

 

Objasnjenje sortiranja:

  • sortiranje ce biti izvrseno alfabetskim redom od A do Z (ako su u pitanju samo slova),
  • ako su u pitanju samo brojevi sortiranje se vrsi od najnizeg prema najvisem,
  • ako su podaci mjesani (brojevi i slova) sortiranje ide sledecim redom: 0, 1, 2, 3, 4 …, 9, A, B, C …, X, W, Z). Ako ima bilo kakvih drugih znakova kao npr. #ß?$§%& itd, oni se svi nalaze prije brojeva,
  • ako su dva polja apsolutno ista (npr.: Vlasnik – dva puta osoba1 (Ime1 Prezime1)), onda na prvo mjesto dolazi polje koje je prije uneseno u tabelu, odnosno ono polje koje se nalazi na visem mjestu u tabeli (u nasem slucaju se VW nalazi na prvom mjestu, a Mercedes na drugom)

Na osnovu ovog objasnjenja cemo sada sortirati nasu tabelu (orginalnu, ne ovu trenutnu izmjednjenu) po Modelu (izmjesani znakovi 0 slova i brojevi):

 

Komanda:

 
SELECT *

FROM Auto1
ORDER BY Model
;

 

Rezultat:

Proizvodjac Model Boja Godiste Vlasnik
Mercedes 190 C Siva 1991 Ime1 Prezime1
VW Golf GTI 2000 Plava 1986 Ime1 Prezime1
Ford Sierra 2.0 Crvane 1986 Ime2 Prezime2

Kao sto vidite, na prvom mjestu u tabeli se nalazi Mercedes (Model: 190 C) jer pocinje sa brojem. Na drugom mjestu se nalazi VW (Golf GTI 2000), a na trecem mjestu je Ford (Sierra 2.0), jer se slovo G nalazi u alfabetu prije slova S.

 
Ali sta ako zelimo da nasu tabelu obrnuto sortiramo? Tu koristimo dva pomocna izraza: ASC (ascend = rastuci) i DESC (descend = padajuci).

 
Prakticno to izgleda ovako:

 
SELECT *
FROM Auto1
ORDER BY Model DESC

;

 
Rezultat:

Proizvodjac Model Boja Godiste Vlasnik
Ford Sierra 2.0 Crvane 1986 Ime2 Prezime2
VW Golf GTI 2000 Plava 1986 Ime1 Prezime1
Mercedes 190 C Siva 1991 Ime1 Prezime1

Kao sto vidite sada rezultat izgleda totano obrnuto: Mercedes (190 C) je na zadnjem mjestu, a Ford
(Sierra 2.0) na prvom mjestu, jer je tabela obrnuto sortirana (Z, W, X … C, B, A, 9, 8, 7…1, 0).

 
To znaci da DESC izraz sortira obrnuto, dok ASC izraz sortira normalnim alfabetskim redom. ASC ocigledno
nije obavezan da se pise, ali radi bolje preglednosti se skoro uvijek koristi,

 
GROUP BY

 
Sljedeca komanda, GROUP BY, funkcionise na slican nacin, ali za razliku od ORDER BY komande, djeluje na citave grupe podataka. Ona se najvise koristi kada se koriste tzv. SQL agregatne funkcije, koje su objasnjene u sledecoj lekciji. Jedna od tih komanda je i COUNT DISTINCT komanda koja je vec objasnjena u 3. lekciji, i mi cemo je koristiti u nasem primjeru. Druga vazn stvar u vezi ovih komandi je da ne smijete ovu komandu koristiti sa nenavedenim komandama, tj. ne smijete je koristiti sa varijablama koje niste sa SELECT pozvali.

 
Ovo je nasa tabela (redoslijed redova je izmjenjen):

Proizvodjac Model Boja Godiste Vlasnik
Ford Sierra 2.0 Crvane 1986 Ime2 Prezime2
Mercedes 190 C Siva 1991 Ime1 Prezime1
VW Golf GTI 2000 Plava 1986 Ime1 Prezime1

A ovo je komanda :

 
SELECT Vlasnik DISTINCT COUNT(Godiste) AS Novo_Godiste

FROM Auto1

GROUP BY Vlasnik
;

 
I nas rezultat je:

Ukupno Novo_Godiste
Ime2 Prezime2 1
Ime1 Prezime1 2

Kao sto vidite nasa komanda u ovom slucaju djeluje na citavu grupu podataka.

 
HAVING

 

I treca komanda ove lekcije je HAVING. Ona funkcionise slicno na WHERE komanda, jer odredjuje koji ce podaci
biti odabrani. HAVING se obicno koristi u kombinciji sa GROUP BY komandom. Ako se HAVING komanda koristi
sama, onda u nasoj komandi mora biti i jedna tzv. agregatna funkcija (COUNT, SUM, AVG … = vidi 3. i 12.
lekciju). Koristit cemo vec poznatu tablicu (vidi prvu tablicu na ovoj starnici).

ovo je komanda :

 
SELECT Vlasnik DISTINCT COUNT(Godiste) AS Novo_Godiste

FROM Auto1
GROUP BY Vlasnik

HAVING Novo_Godiste < 2 ;
 
I nas rezultat je:

Ukupno Novo_Godiste
Ime2 Prezime2 1

Kao sto vidite osobe1 nema u nasem rezultatu, jer ona ima vise od jednog automobila.

Popularity: 23% [?]

SQL-tecaj , , , , ,

  1. Trenutno nema komentara.
  1. No trackbacks yet.