SEMINAR 9
1) SELECT
Comenzi.*,
CASE
WHEN Regiune = 'Europe' THEN ValoareTotala * 0.10
ELSE 0
END AS Discount
FROM
Comenzi;
2) SELECT
Comenzi.*,
CASE
WHEN Regiune = 'America' THEN ValoareTotala * 0.15
ELSE 0
END AS Discount
FROM
Comenzi;
3) SELECT
Comenzi.*,
CASE
WHEN Regiune = 'Asia' THEN ValoareTotala * 0.12
ELSE 0
END AS Discount
FROM
Comenzi;
4) SELECT
Comenzi.*,
CASE
WHEN Regiune = ('Orientul Mijlociu', 'Africa') THEN ValoareTotala * 0.18
ELSE 0
END AS Discount
FROM
Comenzi;
SEMINAR 10
Set1
1) SELECT nr_comanda ,data,
SUM(cantitate * pret) AS valoare_comanda FROM Comenzi
WHERE EXTRACT(YEAR FROM data) = 1999
GROUP BY nr_comanda, data HAVING SUM(cantitate * pret) > 2000
ORDER BY data;
2) SELECT nr_comanda, data,
SUM(cantitate * pret) AS valoare_totala,
CASE
WHEN SUM(cantitate * pret) <= 1000 THEN 100
WHEN SUM(cantitate * pret) > 1000 AND SUM(cantitate * pret) <= 2000 THEN 200
ELSE 300
END AS cheltuieli_transport
FROM NumeleTabeluluiComenzi
GROUP BY nr_comanda, data
ORDER BY data;
3) SELECT id_client, id_produs,
SUM(cantitate) AS cantitate_totala FROM Vanzari
GROUP BY id_client, id_produs;
4) SELECT id.nume, Id.departament, id.nivel_ierarhic
FROM Angajati
JOIN Angajati
WHERE
id.nume = 'Russell' AND nivel_ierarhic > .nivel_ierarhic;
5) SELECT A1.nume, A1.functie, A1.nivel_ierarhic, A1.departament
FROM Angajati A1
WHERE A1.functie = (SELECT functie FROM Angajati WHERE nume = 'Rogers')
NOT EXISTS ( SELECT 1 FROM Angajati A2 WHERE A2.functie = A1.functie AND A2.nivel_ierarhic >
A1.nivel_ierarhic);
Set2
1) SELECT nume, salariu, data_angajarii, functie
FROM Angajati
WHERE (functie = 'Programmer' OR functie = 'Accountant') AND TO_CHAR (data_angajarii, 'YYYY')
BETWEEN '1995' AND '1998';
2)
SET pret = pret * 1.15
WHERE pret < (SELECT AVG(pret) FROM rand_comenzi WHERE denumire LIKE '%sound%');
3) SELECT nume, data_angajarii, functie, functii_detinute
FROM Angajati
WHERE id_departament IN (50, 80) AND TO_CHAR(data_angajarii, 'YYYY') BETWEEN '1995' AND '1999';
4)
SET pret = pret * 0.95
WHERE cantitate < (SELECT AVG(cantitate) FROM rand_comenzi WHERE denumire LIKE '%CPU%');
5) SELECT denumire, SUM(cantitate * pret) AS valoare_totala
FROM rand_comenzi
GROUP BY denumire HAVING SUM(cantitate * pret) BETWEEN 1500 AND 4000;
6) SELECT nr_comanda, data,
SUM(cantitate * pret) AS valoare_totala, COUNT(DISTINCT id_produs) AS numar_produse
FROM Comenzi
WHERE tip_comanda = 'online' AND TO_CHAR(data, 'YYYY') BETWEEN '1999' AND '2000'
GROUP BY nr_comanda, data HAVING COUNT(DISTINCT id_produs) >= 2;
Set3
1) SELECT nr_comanda, denumire_produs, pret, cantitate, cantitate * pret AS valoare
FROM Comenzi
WHERE LOWER(produs) LIKE '%monitor%';
2) SELECT nume, id_departament, COUNT(nr_comanda) AS numar_comenzi
FROM Angajati A
JOIN Comenzi ON id_angajat =id_angajat
WHERE id_departament = 80 AND TO_CHAR(C.data, 'MM') = '11'
GROUP BY nume, id_departament;
3) UPDATE rand_comenzi
SET pret = pret * 0.90
WHERE pret > (SELECT AVG(pret) FROM rand_comenzi WHERE id_produs = '3155');
4) SELECT A.nume, A.functie,
COUNT(C.nr_comanda) AS numar_comenzi
FROM Angajati A
JOIN Comenzi ON id_angajat = id_angajat
GROUP BY A.nume, A.functie
HAVING COUNT(C.nr_comanda) >= 2;
5) UPDATE rand_comenzi
SET pret = pret * 1.05
WHERE cantitate * pret >= 1000;
6) SELECT A.nume,
COUNT(C.nr_comanda) AS numar_comenzi, A.salariu,
CASE
WHEN COUNT(C.nr_comanda) BETWEEN 1 AND 2 THEN A.salariu * 0.05
WHEN COUNT(C.nr_comanda) BETWEEN 3 AND 5 THEN A.salariu * 0.07
ELSE A.salariu * 0.10
END AS bonus
FROM Angajati A
LEFT JOIN NumeleTabeluluiComenzi C ON A.id_angajat = C.id_angajat
GROUP BY A.nume, A.salariu;