0% found this document useful (0 votes)
14 views4 pages

TEMA

The document contains examples of SQL queries using aggregation functions like SUM, COUNT, MIN, MAX and GROUP BY. It also includes examples using CASE statements, UNIONs, INTERSECTs and MINUS operators.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views4 pages

TEMA

The document contains examples of SQL queries using aggregation functions like SUM, COUNT, MIN, MAX and GROUP BY. It also includes examples using CASE statements, UNIONs, INTERSECTs and MINUS operators.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

Exercitii recapitulative:

1. SELECT id_departament, SUM(salariul) AS total_salarii


FROM angajati
GROUP BY id_departament

2.SELECT
id_functie,
MIN(salariul) AS salariu_minim,
AVG(salariul) AS salariu_mediu,
MAX(salariul) AS salariu_maxim
FROM angajati
GROUP BY id_functie;

3.SELECT
id_functie,
MIN(salariul) AS salariu_minim,
AVG(salariul) AS salariu_mediu,
MAX(salariul) AS salariu_maxim,
COUNT(*) AS numar_angajati
FROM angajati
GROUP BY id_functie;

4.SELECT id_departament,
COUNT(*) AS numar_angajati_departament
FROM angajati
GROUP BY id_departament;

5.SELECT
denumire_departament,
COUNT(*) AS numar_angajati
FROM angajati, departamente
WHERE denumire_departament IN ('Purchasing', 'Shipping', 'IT')
GROUP BY denumire_departament;

6.SELECT COUNT(*) AS numar_salariati


FROM angajati
WHERE data_angajare < '08/15/2019';

7.SELECT
id_departament,
COUNT(*) AS numar_angajati,
SUM(salariul) AS suma_totala_plata_salarii
FROM angajati
GROUP BY id_departament
HAVING COUNT(*) > 5;

8.SELECT id_departament,
SUM(salariul) AS suma_totala_plata_salarii,
ROUND(AVG(salariul)) AS salariul_mediu
FROM angajati
GROUP BY id_departament
HAVING SUM(salariul)>20000;

9. SELECT
id_functie,
SUM(salariul * (1 + comision)) AS suma_totala_incasata
FROM angajati
GROUP BY id_functie
HAVING SUM(salariul * (1 + comision)) > 25000;

10.SELECT
id_departament,
id_functie,
MIN(salariul) AS salariu_minim,
AVG(salariul) AS salariu_mediu,
MAX(salariul) AS salariu_maxim,
COUNT(*) AS numar_total_angajati
FROM angajati
GROUP BY id_departament, id_functie;

11. SELECT
nume,
prenume,
salariul,
id_departament,
CASE
WHEN id_departament = 20 THEN salariul * 1.1
WHEN id_departament = 40 THEN salariul * 1.15
WHEN id_departament = 60 THEN salariul * 1.2
ELSE salariul
END AS salariu_actualizat
FROM angajati;

12. SELECT nume, prenume,id_functie, salariul,


CASE
WHEN id_functie IN('SA_REP', 'SA_MAN') THEN salariul * (1+comision)
WHEN id_functie IN('IT') THEN salariul * 1.2
ELSE salariul
END AS suma_de_incasat
FROM angajati

13. SELECT
nume,
salariul,
data_angajare,
CASE
WHEN data_angajare BETWEEN '01/01/2015' AND '01/01/2016' THEN salariul * 0.3
WHEN data_angajare BETWEEN '01/01/2017' AND '01/01/2018' THEN salariul * 0.2
WHEN data_angajare BETWEEN '01/01/2019' AND '01/01/2020' THEN salariul * 0.1
ELSE salariul * 0.05
END AS prima
FROM angajati;

14. SELECT nume, salariul, data_angajare, salariul * 0.3 AS prima


FROM angajati
WHERE data_angajare BETWEEN '01/01/2015' AND '01/01/2016'

UNION

SELECT nume, salariul, data_angajare, salariul * 0.2 AS prima


FROM angajati
WHERE data_angajare BETWEEN '01/01/2017' AND '01/01/2018'

UNION

SELECT nume, salariul, data_angajare, salariul * 0.1 AS prima


FROM angajati
WHERE data_angajare BETWEEN '01/01/2019' AND '01/01/2020'

UNION

SELECT nume, salariul, data_angajare, salariul * 0.05 AS prima


FROM angajati
WHERE data_angajare NOT BETWEEN '01/01/2015' AND '01/01/2020';

15. SELECT
nume, salariul, COALESCE(comision, 0) AS valoare_comision
FROM angajati
MINUS

SELECT
nume, salariul, COALESCE(comision, 0) AS valoare_comision
FROM angajati
WHERE comision IS NULL;

Exercitiile din seminarul "Union/Intersect/Minus":


2. SELECT
c.nume_client,
c.prenume_client,
CASE
WHEN co.Stare_comanda = 1 THEN 0.1
WHEN co.Stare_comanda = 2 THEN 0.15
WHEN co.Stare_comanda > 3 THEN 0.2
ELSE 0
END AS DC
FROM clienti c
JOIN comenzi co ON c.id_client = co.id_client
WHERE c.nume_client NOT LIKE 'M%'
MINUS
SELECT
c.nume_client,
c.prenume_client,
0 AS DC
FROM clienti c
WHERE c.nume_client LIKE 'M%'
ORDER BY nume_client DESC;

3. SELECT
a.nume,
a.prenume,
0.1 AS DC
FROM angajati a
JOIN comenzi co ON a.id_angajat = co.id_angajat
WHERE co.stare_comanda=1

UNION
SELECT
a.nume,
a.prenume,
0.2 AS DC
FROM angajati a
JOIN comenzi co ON a.id_angajat = co.id_angajat
WHERE co.stare_comanda=2

UNION
SELECT
a.nume,
a.prenume,
0.3 AS DC
FROM angajati a
JOIN comenzi co ON a.id_angajat = co.id_angajat
WHERE co.stare_comanda=3

UNION
SELECT
a.nume,
a.prenume,
0 AS DC
FROM angajati a
JOIN comenzi co ON a.id_angajat = co.id_angajat
WHERE co.stare_comanda NOT IN (1, 2, 3);

4.
SELECT
p.denumire_produs,
SUM(c.cantitate * c.pret) AS valoare_totala,
COUNT(c.cantitate) AS nr_comenzi
FROM rand_comenzi c
JOIN produse p ON c.id_produs = p.id_produs
GROUP BY p.denumire_produs
HAVING COUNT(c.cantitate) >= 3

INTERSECT

SELECT
p.denumire_produs,
SUM(c.cantitate * c.pret) AS valoare_totala,
COUNT(c.cantitate) AS nr_comenzi
FROM rand_comenzi c
JOIN produse p ON c.id_produs = p.id_produs
GROUP BY p.denumire_produs
HAVING SUM(c.cantitate * c.pret) NOT IN (1440, 3916);

You might also like