Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Gruparea datelor. Clauza GROUP BY

sql



+ Font mai mare | - Font mai mic



Gruparea datelor. Clauza GROUP BY

Uneori am putea dori sa grupam liniile dintr-o tabela si sa obtinem anumite informatii despre grupurile respective.



De exemplu am dori sa calculam numarul total de voturi obtinut de fiecare candidat in toata tara. Cu ceea ce am invatat pana acum, am putea rula o comanda de forma celei de mai jos pentru fiecare candidat in parte

SELECT sum(numar_voturi)

FROM voturi

WHERE candidat=1  Tabelul II.4.12.

SUM(NUMAR_VOTURI)

insa aceasta metoda nu este convenabila, intrucat am dori sa obtinem un tabel cu toate aceste date, ca in tabelul II.4.13.

O astfel de grupare a datelor se poate face folosind clauza GROUP BY. Comanda care a fost rulata pentru a obtine rezultatul din tabelul II.4.13, este:

SELECT candidat, sum(numar_voturi) AS 'TOTAL VOTURI'

FROM voturi

GROUP BY candidat

Tabelul II.4.13.

CANDIDAT

TOTAL VOTURI

Tabelul II.4.14.

CANDIDAT

NUMAR_VOTURI

Se observa ca pentru fiecare grup de inregistrari s-a obtinut cate o singura valoare, adica pentru fiecare candidat am obtinut o suma a tuturor voturilor primite. De exemplu candidatul cu codul 1 a obtinut in Bucuresti voturi, la Iasi voturi iar la Sibiu voturi, in total  voturi adica exact valoarea din tabelele II.4.12 si II.1.3.

Clauza GROUP BY poate fi folosita si fara functii de grup, doar pentru a afisa liniile grupate dupa anumit criteriu, ca in exemplul urmator:SELECT candidat,numar_voturi FROM voturi

GROUP BY candidat, numar_voturi

Sa vedem acum de exemplu cum aflam procentul mediu obtinut de catre fiecare candidat.

SELECT candidat,AVG(100*numar_voturi/numar_alegatori)

FROM voturi v, judete j WHERE v.judet=j.cod_judet

GROUP BY candidat



Tabelul II.4.15.

CANDIDAT

AVG(100*NUMAR_VOTURI/NUMAR_ALEGATORI)

Reguli de folosire a clauzei GROUP BY

In clauza GROUP BY nu se accepta aliasele coloanelor, comanda urmatoare va genera o eroare

SELECT department_id As Departament

job_id, MAX(salary)

FROM employees GROUP BY Departament, job_id

-toate campurile care apar in select in afara functiilor de grup trebuie sa apara in clauza BROUP BY ca in exemplele de mai jos:

SELECT department_id, job_id, MAX(salary)

FROM employees GROUP BY department_id, job_id

sau

SELECT department_id, department_name, max(salary)

FROM employees NATURAL JOIN departments

GROUP BY department_id, department_name

sau

SELECT upper(last_name), sum(salary)

FROM employees GROUP BY last_name

Observati in acest ultim exemplu ca desi in clauza SELECT campului last_name ii este aplicata o functie (simpla nu de grup!) , in clauza GROUP BY last_name poate sa apara fara functia respectiva. Aveti grija sa nu confundati functiile singulare cu cele de grup!

-Nu se pot folosi functii de grup in clauza WHERE. De aceea urmatoarea comanda nu va putea fi rulata ea generand o eroare:

SELECT * FROM voturi

WHERE numar_voturi=max(numar_voturi)

Pentru a putea afla ce candidat/candidati au obtinut cele mai multe voturi vom folosi o subinterogare (asupra acestui subiect vom reveni in capitolul urmator) astfel

SELECT * FROM voturi

WHERE numar_voturi =

(SELECT max(numar_voturi) from voturi)

-in clauza GRUP BY pot sa apara si alte coloane care nu apar in SELECT

SELECT MAX(salary) FROM employees

GROUP BY departments

-functiile de grup pot fi imbricatre ca in exemplul urmator, in care am determinat cel mai mare numar total de voturi obtinut de catre un candidat.

SELECT max(sum(numar_voturi)) FROM voturi

GROUP BY candidat

Tabelul II.4.16.

MAX(SUM(NUMAR_VOTURI))




Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1417
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved