Kategoria: Poziom podstawowy

Zadanie 29.

Stwórz zapytanie, które pokaże nam najczęściej zamawiane produkty. Wybierz 15 najczęściej zamawianych produktów. (Uwaga: więcej niż jeden produkt może być zamówiony daną ilość razy)

Schemat: OE, Tabela: Order_Items, Kolumny: order_id, product_id, Wynik: 16 rows

p29

 

 

 

 

 

Rozwiązanie

SELECT product_id, COUNT(order_id) AS Orders
FROM order_items
GROUP BY product_id
ORDER BY COUNT(order_id) DESC
FETCH FIRST 15 rows WITH ties;

[collapse]

Zadanie 28.

Rozwinięcie zadania 14: zmodyfikuj kwerendę tak, by uwzględniała i obsługiwała NULLe.

Schemat: HR, Tabela: Employees, Kolumny: first_name, last_name, employee_id, manager_id, Wynik: 196 rows

p28

 

 

 

Rozwiązanie

SELECT NVL(mgr.first_name, 'Nikt nie')
||' '
||NVL(mgr.last_name, '')
||' jest managerem '
||' '
||NVL(emp.first_name, 'niczyim')
||' '
||NVL(emp.last_name, '') AS "Manager"
FROM employees emp
FULL OUTER JOIN employees mgr
ON mgr.employee_id = emp.manager_id
ORDER BY mgr.employee_id;

[collapse]

 

 

Zadanie 27.

Korzystając z polskiego opisu produktu nr 2459 spraw, by wszystkie litery były wielkie, a zamiast spacji wstaw trzy kropki.

Schemat: OE, Tabela; Product_descriptions, Kolumny: product_id, language_id, translated_description, Wynik: 1 row

Rozwiązanie

SELECT upper(REPLACE(translated_description, ' ', '...'))
FROM product_descriptions
WHERE language_id = 'PL'
AND product_id = 2459;

[collapse]

Zadanie 26.

Korzystając z opisu produktów (PL) znajdź te które, zawierają słowo „monitor”. Wyświetlając wynik kwerendy, zastąp to słowo słowem „wyświetlacz”.

Schemat: OE, Tabela: Product_Descriptions, Kolumny: translated_description, language_id, Wynik: 17 rows

p26

 

 

Rozwiązanie

SELECT REPLACE(translated_description, 'monitor', 'wyświetlacz')
FROM product_descriptions
WHERE language_id = 'PL'
AND translated_description LIKE '%monitor%';

[collapse]

Zadanie 25.

Dla 10 ostatnich (najnowszych) zamówień określ, czy klient zamawiający ma credit_limit wystarczający na pokrycie kosztów zamówienia. Wynik podaj opisowo – order_id, customer_id, oraz „Limit OK” lub „Limit zbyt mały”.

Schemat: OE, Tabele: Customers, Orders, Kolumny: order_id, customer_id, credit_limit, order_total, Wynik: 10 rows

p25

 

 

 

 

 

 

Rozwiązanie

SELECT o.order_id, customer_id,
CASE
WHEN c.credit_limit >= o.order_total THEN 'Limit OK'
ELSE 'Limit zbyt maly'
END as Limity
FROM orders o INNER JOIN customers c
USING(customer_id)
ORDER BY o.order_id DESC
OFFSET 0 ROWS FETCH FIRST 10 ROWS ONLY;

[collapse]

Zadanie 24.

Dla zamówień o numerach 2355, 2413, 2377 i 2361 policz:

a) ile produktów zawiera każde z nich oraz podaj średnią cenę produktu

b) podaj kraj, z którego zostało złożone zamówienie; ile zamówień ma na koncie klient, który je złożył?

Schemat: OE, Tabele: Orders, Customers, Order_Items, Kolumny: order_id, product_id, unit_price, nls_territory, Wynik: 4 rows

Rozwiązanie

a) SELECT order_id, COUNT(product_id) as Products, to_char(AVG(unit_price), '999D99')as Avg_Price
FROM orders o INNER JOIN order_items oi USING(order_id)
WHERE order_id IN(2355, 2413, 2377, 2361)
GROUP BY order_id;

b) SELECT customer_id, MIN(c.nls_territory) as Country, COUNT(o.order_id) as Orders
FROM orders o INNER JOIN customers c USING(customer_id)
WHERE o.order_id IN(2355, 2413, 2377, 2361)
GROUP BY customer_id;

[collapse]

Zadanie 23.

Klienci z jakich krajów złożyli zamówienia w 2006 roku? Nazwy krajów uporządkuj alfabetycznie i zadbaj, by się nie powtarzały.

Schemat: OE, Tabele: Customers, Orders, Kolumny: customer_id, order_date, nls_territory, Wynik: 1 row

Rozwiązanie

SELECT DISTINCT c.nls_territory
FROM orders o INNER JOIN customers c
USING(customer_id)
WHERE EXTRACT(YEAR from o.order_date) = '2006';

[collapse]

Zadanie 22.

Dla każdego klienta, który złożył zamówienie, określ średnią wartość zamówienia. Ponumeruj klientów wg najwyższej średniej wartości zamówienia.

Schemat: OE, Tabele: Customers, Orders, Kolumny: customer_id, order_total, Wynik: 47 rows

p22

 

 

 

 

 

Rozwiązanie

SELECT customer_id, AVG(o.order_total) as "Avg Order Value", ROW_NUMBER() OVER(ORDER BY AVG(o.order_total) DESC) as Num
FROM orders o INNER JOIN customers c
USING(customer_id)
GROUP BY customer_id
ORDER BY Num;

[collapse]

Zadanie 21.

Dla klientów o ID 101, 111, 121, 141, 171 i 201 pokaż numer oraz datę ostatniego złożonego zamówienia. Jeśli klient nie ma na swoim koncie zamówień, powinna pojawić się stosowna informacja.

Schemat: OE, Tabele: Orders, Customers, Kolumny: customer-id, order_id, order_date, Wynik: 6 rows

p21

 

 

Rozwiązanie

SELECT customer_id as Customer, MAX(o.order_id) as "Last order",
to_char(MAX(o.order_date), 'DD.MM.YYYY') as "Last ord. date",
CASE
WHEN MAX(o.order_id) IS NULL THEN 'Ten klient nie ma zamówień'
ELSE ' '
END as Opis
FROM customers c LEFT OUTER JOIN orders o
USING(customer_id)
WHERE customer_id IN(101, 111, 121, 141, 171, 201)
GROUP BY customer_id
ORDER BY customer_id;

[collapse]

Zadanie 20.

Pokaż klientów o parzystym ID, którzy złożyli więcej niż 3 zamówienia lub nie złożyli żadnego.

Schemat: OE, Tabele: Orders, Customers, Kolumny: customer_id, order_id, Wynik: 138 rows

p20

 

 

 

 

Rozwiązanie

SELECT customer_id as Customer, COUNT(order_id) as Orders
FROM customers c LEFT OUTER JOIN orders o
USING(customer_id)
WHERE MOD(customer_id, 2) = 0
GROUP BY customer_id
HAVING COUNT(order_id) >= 3 OR COUNT(order_id) = 0
ORDER BY customer_id;

[collapse]
« Starsze wpsiy