0% found this document useful (0 votes)
19 views5 pages

Seminar 9+10

The document contains SQL queries that apply discounts or bonuses to orders or employees based on region, order value, product type, number of orders, or other criteria. The queries select, group, join, and filter data from order and employee tables to analyze orders and assign appropriate discounts or bonuses. Calculated fields are added to the selected rows using CASE statements to assign discount or bonus amounts conditionally.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
19 views5 pages

Seminar 9+10

The document contains SQL queries that apply discounts or bonuses to orders or employees based on region, order value, product type, number of orders, or other criteria. The queries select, group, join, and filter data from order and employee tables to analyze orders and assign appropriate discounts or bonuses. Calculated fields are added to the selected rows using CASE statements to assign discount or bonus amounts conditionally.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

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;

You might also like