{"id":19029291,"url":"https://github.com/sulmar/dsm.sql","last_synced_at":"2026-03-19T07:46:00.628Z","repository":{"id":94109989,"uuid":"101969455","full_name":"sulmar/DSM.SQL","owner":"sulmar","description":"Przykłady ze szkolenia SQL dla DSM","archived":false,"fork":false,"pushed_at":"2022-06-13T06:40:58.000Z","size":387,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-06T22:47:29.578Z","etag":null,"topics":["sql"],"latest_commit_sha":null,"homepage":null,"language":"TSQL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sulmar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-08-31T06:54:36.000Z","updated_at":"2022-06-10T11:19:35.000Z","dependencies_parsed_at":"2023-03-13T17:07:18.796Z","dependency_job_id":null,"html_url":"https://github.com/sulmar/DSM.SQL","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sulmar/DSM.SQL","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sulmar%2FDSM.SQL","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sulmar%2FDSM.SQL/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sulmar%2FDSM.SQL/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sulmar%2FDSM.SQL/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sulmar","download_url":"https://codeload.github.com/sulmar/DSM.SQL/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sulmar%2FDSM.SQL/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29344158,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-11T20:11:40.865Z","status":"ssl_error","status_checked_at":"2026-02-11T20:10:41.637Z","response_time":97,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["sql"],"created_at":"2024-11-08T21:13:47.498Z","updated_at":"2026-02-11T20:35:37.868Z","avatar_url":"https://github.com/sulmar.png","language":"TSQL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Podstawy języka SQL \n\nZ użyciem przykładowej bazy danych **Sakila**\nhttps://github.com/ivanceras/sakila/tree/master/sql-server-sakila-db\n\n### Wybór bazy danych\n\n~~~ sql\nuse sakila\n~~~\n\n### Komentarze\n\n- Komentarz pojedycznej linii\n~~~ sql\n-- komentarz\n~~~\n\n- Komentarz blokowy\n~~~ sql\n/* \n   komentarz\n   blokowy\n*/\n~~~\n\n\n### Pobranie danych z tabeli\n~~~ sql\nselect * from customer\n~~~ \n\n### Wybór pól\n\n~~~ sql\nselect first_name, last_name, email from customer\n~~~\n\n### Aliasy kolumn\n~~~ sql\nselect \n\tfirst_name as imie, \n\tlast_name as nazwisko, \n\temail\nfrom \n\tcustomer\n~~~\n\n\n### Filtrowanie\n\n- Filtrowanie z uzyciem operatorów logicznych\n~~~ sql\nselect \n\tfirst_name as imie, \n\tlast_name as nazwisko, \n\temail,\n\tactive\nfrom \n\tcustomer\nwhere\n\t(first_name = 'mary' or first_name = 'john' or first_name = 'adam')\n\tand active = 0\n~~~\n\n- Filtrowanie na podstawie zbioru\n~~~ sql\nselect \n\tfirst_name as imie, \n\tlast_name as nazwisko, \n\temail,\n\tactive\nfrom \n\tcustomer\nwhere\n\tfirst_name in ('mary', 'john', 'adam')\n~~~\n\n## Sortowanie\n\n- sortowanie po jednej kolumnie\n~~~ sql\nselect * from customer order by first_name\n~~~\n\n- sortowanie po kilku kolumnach\n~~~ sql\nselect * from customer order by first_name desc, last_name desc\n~~~\n\n## Funkcje tekstowe\n\n- operacje na tekstach\n~~~ sql\nselect \n\tfirst_name,\n\tlower(first_name),\n\tleft(first_name, 3), \n\tright(last_name, 3),\n\tSUBSTRING(first_name, 3, 2)\nfrom customer\n~~~\n\n## Funkcje agregujące\n\n- liczność rekordów\n~~~ sql\nselect count(*) from customer where active = 1\n~~~\n\n- liczność wartości\n~~~ sql\nselect count(first_name) as quantity from customer where active = 1\n~~~\n\n- suma \n~~~ sql\nselect sum(amount) as total from payment\n~~~\n\n\n- ilość unikalnych\n~~~ sql\nselect count(distinct first_name) from customer\n~~~\n\n- obliczanie średniej\n~~~ sql\nselect avg(isnull(amount,0)) from payment\n~~~\n\n## Złączenia\n\n- złączenie wewnętrzne (inner join)\n\n~~~ sql\nselect \n\tcustomer.first_name,\n\tcustomer.last_name,\n\t[address].[address],\n\tcustomer.address_id,\n\t[address].city_id\n from customer\n\tinner join address \n\t\ton customer.address_id = address.address_id  -- warunek złączenia\n~~~\n\n\n- złączenie wielu tabel\n\n~~~ sql\nselect \n\tcustomer.first_name,\n\tcustomer.last_name,\n\t[address].[address],\n\tcity.city,\n\tcountry.country\n from customer\n\tinner join address \n\t\ton customer.address_id = address.address_id  -- warunek złączenia\n\tinner join city\n\t\ton address.city_id = city.city_id\n\tinner join country\n\t\ton city.country_id = country.country_id\n~~~\n\n\n- Ilość klientów w poszczególnych państwach\n\n~~~ sql\nselect \n\tcountry.country,\n\tcount(*) as [count]\n from customer\n\tinner join address \n\t\ton customer.address_id = address.address_id  -- warunek złączenia\n\tinner join city \n\t\ton address.city_id = city.city_id\n\tinner join country \n\t\ton city.country_id = country.country_id\ngroup by country.country\n\n~~~\n\n\n- Wyświetlenie filmów i ich kategorii\n\n~~~ sql\nselect \n\tfilm.title,\n\tcategory.name\n from film\n\tinner join film_category\n\t\ton film.film_id = film_category.film_id\n\tinner join category\n\t\ton film_category.category_id = category.category_id\n~~~\n\n\n## Zadania\n\n- Z jakiej kategorii najczęściej klienci wypożyczają filmy?\n\n~~~ sql\nselect \n\tcategory.name,\n\tcount(*) as rent_count\n from rental\n\t inner join inventory \n\t\ton rental.inventory_id = inventory.inventory_id\n     inner join film_category \n\t\ton film_category.film_id = inventory.film_id\n\tinner join category\n\t\ton film_category.category_id = category.category_id\ngroup by\n\tcategory.name\n~~~\n\n\n## Podzapytania\n- podzapytanie\n\n~~~ sql\nselect sum(rent_count) from \n(select \n\tcategory.name,\n\tcount(*) as rent_count\n from rental\n\t inner join inventory \n\t\ton rental.inventory_id = inventory.inventory_id\n     inner join film_category \n\t\ton film_category.film_id = inventory.film_id\n\tinner join category\n\t\ton film_category.category_id = category.category_id\ngroup by\n\tcategory.name) as subquery\n\n~~~ \n\n\n### Zadanie\n\n- Który z aktorów najczęściej występuje w filmach?\n~~~ sql\nselect top(1)\n  actor.first_name,\n  actor.last_name,\n  count(*) as actor_count\nfrom film\n inner join film_actor \n\ton film.film_id = film_actor.film_id\n inner join actor\n\ton film_actor.actor_id = actor.actor_id\ngroup by\n\tactor.first_name, actor.last_name\norder by count(*) desc\n~~~\n\n\n\n- Które filmy generują największe przychody (top 10)?\n\n~~~ sql\nselect \n\ttop(10)\n\tfilm.title,\n\tsum(payment.amount) as total\n from payment\n\tinner join rental\n\t\ton payment.rental_id = rental.rental_id\n\tinner join inventory\n\t\ton rental.inventory_id = inventory.inventory_id\n    inner join film\n\t\ton inventory.film_id = film.film_id\ngroup by film.title\norder by total desc\n~~~\n\n- W jakim kraju, której kategorii najczęściej są wypożyczane filmy?\n\n\n~~~ sql\n\nselect \n   cat.name,\n   ctr.country,\n   count(r.rental_id) as rent_count,\n   sum(p.amount) as total\nfrom rental as r\n\tinner join customer as c\n\t\ton r.customer_id = c.customer_id\n\tinner join address as a\n\t\ton c.address_id = a.address_id\n\tinner join city as ct\n\t\ton a.city_id = ct.city_id\n\tinner join country as ctr\n\t\ton ct.country_id = ctr.country_id\n\tinner join inventory as i\n\t\ton r.inventory_id = i.inventory_id\n\tinner join film as f\n\t\ton i.film_id = f.film_id\n\tinner join film_category as fc\n\t\ton fc.film_id = f.film_id\n\tinner join category as cat\n\t\ton cat.category_id = fc.category_id\n\tinner join payment as p\n\t\ton p.rental_id = r.rental_id\ngroup by\n   cat.name,\n   ctr.country\norder by\n   cat.name,\n   ctr.country,\n   rent_count desc\n~~~\n\n\n- Jaki jest średni czas wypożyczenia filmów w poszczególnych kategoriach?\n\n~~~ sql\nselect \n\tcategory.name,\n\tavg(datediff(hour, rental_date, return_date) / 24.0) as averange \nfrom rental\n\tinner join inventory \n\t\ton rental.inventory_id = inventory.inventory_id\n\tinner join film\n\t\ton inventory.film_id = film.film_id\n\tinner join film_category\n\t\ton film_category.film_id = film.film_id\n\tinner join category\n\t\ton film_category.category_id = category.category_id\ngroup by category.name\n~~~\n\n## Modyfikacja danych\n\n### Wstawienie danych\n\n- Wstawienie pojedynczego rekordu\n~~~ sql\ninsert into customer  \n\tvalues(1, 'MARCIN', 'SULECKI', 'marcin.sulecki@sulmar.pl', 605, 1, getdate(), getdate())\n~~~\n\n- Wstawienie wielu rekordów\n\n~~~ sql\n -- wstawienie wielu rekordów\ninsert into city \n\tvalues ('Poznań', 76, getdate()), \n\t\t   ('Warszawa', 76, getdate()), \n\t\t   ('Niepruszewo', 76, getdate())\n\n~~~\n\n\n\n\n### Zadanie\n1. dodaj nową kategorię 'Educational'\n~~~ sql\ninsert into category\n\tvalues('Educational', getdate())\n\n~~~\n\n1. dodaj nowy film np. 'SQL in Action' w kategorii 'Educational'\n~~~ sql\ninsert into film (title, language_id, rental_duration, rental_rate, length, replacement_cost, last_update)\n\tvalues ('SQL in Action', 1, 5, 4.99, 120, 20, getdate())\n~~~\n\n\n1. dodaj 2 kopie filmu dla sklepu Store 1 i 1 kopię filmu do sklepu Store 2\n\n~~~ sql\ninsert into inventory\n\tvalues (1002, 1, GETDATE()), (1002, 1, getdate()), (1002, 2, getdate())\n~~~\n\n\n1. Wypozycz film 'SQL in Action' ze sklepu Store 2\n\n~~~ sql\ninsert into rental \n values(getdate(), 4583, 599, null, 1, GETDATE())\n~~~\n\n1. Zwróć wypozyczony film\n~~~ sql\nupdate rental \n\t set return_date = GETDATE()\nwhere\n\trental_id = 16051\n~~~\n\n\n1. które z filmów są obecnie wypożyczone?\n\n~~~ sql\nselect distinct\n\tfilm.title\nfrom rental\n\tinner join inventory\n\t\ton rental.inventory_id = inventory.inventory_id\n\tinner join film\n\t\ton inventory.film_id = film.film_id\nwhere\n\trental.return_date is null \n~~~\n\n\n\n\n~~~ sql\n\ninsert into inventory\n\tvalues (1002, 1, GETDATE()), (1002, 1, getdate()), (1002, 2, getdate())\n\n~~~\n\n## Złączenia zewnętrzne\n\n### Lewe złączenie zewnętrzne\n\n~~~ sql\nselect \n\trental.rental_date,\n\trental.customer_id,\n\tcustomer.first_name,\n\tcustomer.last_name,\n\tcustomer.customer_id\nfrom customer\n\tleft outer join rental\n\t\ton rental.customer_id = customer.customer_id\n~~~\n\n### Prawe złączenie zewnętrzne\n\n~~~ sql\nselect \n\trental.rental_date,\n\trental.customer_id,\n\tcustomer.first_name,\n\tcustomer.last_name,\n\tcustomer.customer_id\nfrom rental\n\tright outer join customer\n\t\ton rental.customer_id = customer.customer_id\n~~~\n- Zastosowanie\n\n~~~ sql\nselect \n\tcustomer.first_name,\n\tcustomer.last_name,\n\tcount(rental.rental_id) as rent_count\nfrom rental\n\tright outer join customer\n\t\ton rental.customer_id = customer.customer_id\ngroup by customer.first_name, customer.last_name\norder by rent_count \n~~~\n\n\n### Pełne złączenie zewnętrzne\n\n~~~ sql\nselect \n\trental.rental_date,\n\trental.customer_id,\n\tcustomer.first_name,\n\tcustomer.last_name,\n\tcustomer.customer_id\nfrom rental\n\tfull outer join customer\n\t\ton rental.customer_id = customer.customer_id\n~~~\n\n\n## Zadanie\n\n1. w ktorych 3 miastach mamy najwiecej klientow?\n~~~ sql\nselect \n\ttop(3)\n    city.city\nfrom customer\n\tinner join address\n\t\ton customer.address_id = address.address_id\n\tinner join city\n\t\ton address.city_id = city.city_id\ngroup by city.city\norder by count(*) desc\n~~~\n\n2. w jakich miastach mamy sklepy?\n\n## Suma zbiorów\n\n- w jakich miastach mamy przeprowadzić akcję bilboardową? Na podst. 3 miast, w których mamy najwiecej klientów i lokalizacji sklepów.  \n\n~~~ sql\n\nselect city from\n(select \n\ttop(3)\n    city.city\nfrom customer\n\tinner join address\n\t\ton customer.address_id = address.address_id\n\tinner join city\n\t\ton address.city_id = city.city_id\ngroup by city.city\norder by count(*) desc) as city_of_customers\n\nunion\n\nselect distinct city.city from store\t\n\tinner join address\n\t\ton store.address_id = address.address_id\n\tinner join city\n\t\ton address.city_id = city.city_id\n ~~~       \n\n\n\n## Kolejność przetwarzania zapytania\n\n- jakie filmy w jezyku angielskim wypozyczone byly wiecej niz 3 razy?\n\n~~~ sql\nselect \n\tfilm.title,\n\tcount(rental.rental_id) as rental_count  \nfrom rental\n\tinner join inventory \n\t\ton rental.inventory_id = inventory.inventory_id\n\tinner join film\n\t\ton inventory.film_id = film.film_id\nwhere film.language_id = 1\ngroup by film.title\nhaving COUNT(*) \u003e 3\norder by rental_count desc\n\n~~~\n\n- Kolejność\n\n1. FROM\n2. WHERE\n3. GROUP BY\n4. HAVING\n5. SELECT\n6. ORDER BY\n\n\n\n## Zadania\n\n- jaki jest średni czas wypożyczenia filmów i dochód w podziale na kategorie?\n\n~~~ sql\nselect \n\tc.name,\n\tavg(datediff(day, rental.rental_date, rental.return_date)) as average,\n\tsum(p.amount) as total\nfrom rental\n\tinner join inventory \n\t\ton rental.inventory_id = inventory.inventory_id\n\tinner join film as f\n\t\ton f.film_id = inventory.film_id\n\tinner join film_category as fc\n\t\ton fc.film_id = f.film_id\n\tinner join category as c\n\t\ton c.category_id = fc.category_id\n\tinner join payment as p\n\t\ton p.rental_id = rental.rental_id\ngroup by c.name\norder by c.name\t\t\n\n~~~\n\n\n- znajdz wszystkich klientów, którzy mają kod pocztowy zaczynający się od 30\n\n~~~ sql\nselect \n\tcustomer.first_name + ' ' + customer.last_name as fullname\n from address\n\tinner join customer \n\t\ton address.address_id = customer.address_id\nwhere address.postal_code like '30%'\n\n~~~\n\n\n## Tworzenie tabel\n\n### Utworzenie tabeli\n\nUtwórz tabelę finish_goods zawierającą następujące kolumny:\n- finish_good_id (PK)\n- code (10 znakow)\n- name (do 40 znakow)\n\n~~~ sql\ncreate table dbo.finish_good \n(\n\tfinish_good_id int not null primary key,\n\tcode char(10) not null,\n\tname varchar(40) null\n)\n~~~\n\n- Wypełnienie tabeli danymi\n\n~~~ sql\n\ninsert into finish_good \n   values  \n(1\t, 'FA00357B05'\t, 'Vitaminas A, D3, E y K1 premix  ' ),\n(2\t, 'FA00355P01'\t, 'Premix Vit nutr med FT117002EU'),\n(3\t, 'FA00356B05'\t, 'Premix Vit A, D3, E, K1 nutr m'),\n(4\t, 'FA00762PD1'\t, 'Vit A, D, RRR-E y K premix'),\n(5\t, 'FA00380P01'\t, 'Premix sulfato de cobre Kosher'),\n(6\t, '5070010RES'\t, 'Citidin 5-monofosfato acido'),\n(7\t, '5070009RES'\t, 'Adenosin 5-monofosfato acido'),\n(8\t, 'FA01056P01'\t, 'Premix Vitam hidro y cobre 4'),\n(9\t, 'FA00776P01'\t, 'WS Premix Vitaminas y Cobre 2'),\n(10\t, 'FA01040B05'\t, 'Premix Vit A,D2,E,K1 Isomil In'),\n(11\t, 'FA00758P01'\t, 'Premix Vit hidro ENG2 (16910)'),\n(12\t, 'FA00763P01'\t, 'Premix de Vit 25913 FT117008EU'),\n(13\t, 'FA00923B05'\t, 'OS Premix Vit China FT101775EU'),\n(14\t, 'FA00754B05'\t, 'OS Premix de Vit 1 FT101494EU'),\n(15\t, 'FA01027P01'\t, 'Prem de vit ES29435 FT101572EU'),\n(16\t, 'FA01035B05'\t, 'Premix de vita OS 2 FT111223EU'),\n(17\t, '5070016RES'\t, 'disodio Uridin 5-monofosfato'),\n(18\t, 'FA00333P01'\t, 'Premix de vit WS 3 FT111233EU'),\n(19\t, 'FA00777A01'\t, 'WS Premix total comfort'),\n(20\t, 'FA00168P01'\t, 'Premix de vit HL10 FT101571EU'),\n(21\t, 'FA00749B05'\t, 'Premix Vit/Min ENG2 FT091634EU'),\n(22\t, 'FA00766P01'\t, 'Premix Vit/Min LF 46810'),\n(23\t, 'FA00765B05'\t, 'Premix de vit EUOS FT117017EU'),\n(24\t, 'FA00367P01'\t, 'WS Premix vitaminas y cobre 1'),\n(25\t, '5070014RES'\t, 'disodio guanosin 5-monofosfato'),\n(26\t, 'FA00189P01'\t, 'Vita Premix 22278 (FT112631EU)'),\n(27\t, 'FA01054B05'\t, 'Premix Vitaminas liposoluble 4'),\n(28\t, 'FA02326P01'\t, 'Premix Vitaminas hidrosolu 6'),\n(29\t, 'FA01842P01'\t, 'Premix Vitaminas Hidrosolubl 7'),\n(30\t, 'FA00952B05'\t, 'Premix Vitaminas Liposoluble 5'),\n(31\t, 'FA01841P01'\t, 'Premix Vitaminas Hidrosolubl 9'),\n(32\t, 'FA00087B05'\t, 'Premix vitaminas A,D3,E,K EEC'),\n(33\t, '5049006RES'\t, 'Premix Hierro Sulfat FT127016B'),\n(34\t, 'FA04622B05'\t, 'OS VITAMIN PREMIX 7')\n~~~\n\n- Wyświetl produkty rozpoczynające się na FA\n~~~ sql\nselect distinct left(code, 7)  as code from finish_good where left(code, 7) like 'FA%'\n~~~\n\n- Wyświetl ilość produktów gotowych z grupy B05\n~~~ sql\nselect count(*) from finish_good where RIGHT(code, 3) = 'B05'\n~~~\n\n\n- Znajdź produkty w których w nazwie występuje słowo 'Premix'\n~~~ sql\nselect * from finish_good where name like '%Premix%'\n~~~\n\n\n- Ile produktów pakowanych jest w określony sposób?\n~~~ sql\nselect \n\tright(code, 3) as packing_group,\n\tcount(*) as packing_count\nfrom finish_good\ngroup by right(code, 3)\n~~~\n\n- Ile jest poszczególnych produktów (na podst. 2 pierwszych znaków w kodzie)\n~~~ sql\nselect \n\tleft(code, 2),\n\tcount(*)\nfrom finish_good\ngroup by left(code, 2)\n~~~\n\n\n\n- ile jest aktywnych i nieaktywnych klientów w poszczególnych sklepach?\n\n~~~ sql\nselect \n\taddress.address,\n\tcustomer.active,\n\tcount(*) as customer_count\nfrom customer\n\tinner join store\n\t\ton customer.store_id = store.store_id\n\tinner join address\n\t\ton store.address_id = address.address_id\ngroup by address.address, customer.active\norder by address.address, customer.active\n\n~~~\n\n\n## Case\n\n~~~ sql\nselect \n\tfirst_name, \n\tlast_name, \n\tactive,\n\tdisplay_active = \n\tcase active\n\t\twhen 1 then 'Aktywny'\n\t\twhen 0 then 'Nieaktywny'\n\tend\nfrom customer\n~~~\n\n- przetłumacz rating filmu na język polski\n~~~ sql\nselect \n\ttitle, \n\trating,\n\trating_pl = \n\tcase rating \t\n\t\twhen 'NC-17' then 'od 17 lat'\n\t\twhen 'PG' then 'BO z rodzicami'\n\t\twhen 'PG-13' then 'od 13 lat'\n\t\twhen 'G' then 'BO'\n\t\twhen 'R' then 'dla dorosłych'\n\tend \t\nfrom film\n~~~\n\n- Ile jest filmów w poszczególnych kategoriach wiekowych (rating)?\n\n~~~ sql\nselect \n\tcase rating \t\n\t\twhen 'NC-17' then 'od 17 lat'\n\t\twhen 'PG' then 'BO z rodzicami'\n\t\twhen 'PG-13' then 'od 13 lat'\n\t\twhen 'G' then 'BO'\n\t\twhen 'R' then 'dla dorosłych'\n\tend,\n\tcount(*) as film_count\nfrom film\ngroup by case rating \t\n\t\twhen 'NC-17' then 'od 17 lat'\n\t\twhen 'PG' then 'BO z rodzicami'\n\t\twhen 'PG-13' then 'od 13 lat'\n\t\twhen 'G' then 'BO'\n\t\twhen 'R' then 'dla dorosłych'\n\tend\n~~~\n\n- Uproszczenie zapytania z zastosowaniem podzapytania\n\n~~~ sql\nselect \n\trating_pl,\n\tcount(*) as film_count\nfrom (select \n\trating_pl = case rating \t\n\t\twhen 'NC-17' then 'od 17 lat'\n\t\twhen 'PG' then 'BO z rodzicami'\n\t\twhen 'PG-13' then 'od 13 lat'\n\t\twhen 'G' then 'BO'\n\t\twhen 'R' then 'dla dorosłych'\n\tend,\n\ttitle\nfrom film) as film_pl\ngroup by rating_pl\n~~~\n\n- Uproszczenie zapytania z zastosowaniem wyrazenia CTE (Common Table Expression)\n\n~~~ sql\nwith film_pl as (select \n\trating = case rating \t\n\t\twhen 'NC-17' then 'od 17 lat'\n\t\twhen 'PG' then 'BO z rodzicami'\n\t\twhen 'PG-13' then 'od 13 lat'\n\t\twhen 'G' then 'BO'\n\t\twhen 'R' then 'dla dorosłych'\n\tend,\n\ttitle\nfrom film)\n\nselect \n\trating,\n\tcount(*) as film_count from film_pl\ngroup by rating\n~~~\n\n\n## Grupowanie po datach\n\n\n- jakie mieliśmy przychody w poszczególnych latach?\n\n~~~ sql\nselect\n\tdatepart(year, payment_date) as year,\n\tsum(amount) as total\nfrom payment\ngroup by datepart(year, payment_date)\n~~~\n\n- jakie mieliśmy przychody w poszczególnych latach i miesiącach?\n~~~ sql\nselect\n\tdatepart(year, payment_date) as year,\n\tdatepart(month, payment_date) as month,\n\tsum(amount) as total\nfrom payment\ngroup by \n\tdatepart(year, payment_date),\n\tdatepart(month, payment_date)\norder by year, month\n~~~\n\n## Funkcje okienkowe\n\n### Narastająco\n\n~~~ sql\nselect \n\tamount,\n\tsum(amount) over (order by payment_id) as running_total\nfrom payment\n~~~\n\n### Partycjonowanie danych\n\n- Dochody narastająco w podziale na miesiące\n~~~ sql\nselect \n\tamount,\n\tdatepart(month, payment_date) as month,\n\tsum(amount) over (partition by datepart(month, payment_date) order by payment_id) as running_total\nfrom payment\n~~~\n\n-- ile było wypożyczeń filmów narastająco w podziale na lata\n~~~ sql\nselect\n\tyear,\n\tsum(rental_count) over (order by year) as running_total\nfrom \n(select \n datepart(year, rental_date) as year,\n count(*) as rental_count\nfrom rental\t\ngroup by datepart(year, rental_date)\n) as query\n\n~~~\n\n- z zastosowaniem wyrazeń CTE\n\n~~~ sql\nwith query as (select \n datepart(year, rental_date) as year,\n count(*) as rental_count\nfrom rental\t\ngroup by datepart(year, rental_date)\n) \n\nselect\n\tyear,\n\tsum(rental_count) over (order by year) as running_total\nfrom query\n~~~\n\n## Zadanie\n\n- Czy film 'Academy Dinosaur' jest dostepny w sklepie Store 1? \n\n~~~ sql\n\n~~~\n\n- Które filmy mamy 2 kopie?\n\n~~~ sql\nselect \n\tfilm.title,\n\tcount(*) as number_of_copies \nfrom film\n\tinner join inventory\n\t\ton film.film_id = inventory.film_id\ngroup by film.title\nhaving count(*) = 2\n~~~\n\n- W których kategoriach filmów mamy powyżej 50 tytułów?\n\n~~~ sql\nselect \n\tcategory.name,\n\tcount(*) as film_count\nfrom film\n\tinner join film_category \n\t\ton film.film_id = film_category.film_id\n\tinner join category\n\t\ton film_category.category_id = category.category_id\ngroup by category.name\nhaving count(*)\u003e 50\norder by film_count\n~~~\n\n- pokaż 3 kraje z których najczęściej wypożyczane są filmy\n\n~~~ sql\nselect top(3)\n\tcountry.country,\n\tcount(rental.rental_id) as rental_count\nfrom rental\n\tinner join customer\n\t\ton rental.customer_id = customer.customer_id\n\tinner join address \n\t\ton customer.address_id = address.address_id\n\tinner join city\n\t\ton city.city_id = address.city_id\n\tinner join country\n\t\ton city.country_id = country.country_id\n\tgroup by country.country\norder by rental_count desc\n~~~\n\n\n- znajdź wypożyczenia, które nie zostały opłacone\n~~~ sql\nselect distinct\n\tcustomer.first_name,\n\tcustomer.last_name\nfrom rental\t\n\tleft outer join payment\n\t\ton rental.rental_id = payment.rental_id\n\tinner join customer\n\t\ton rental.customer_id = customer.customer_id\nwhere \n\tpayment.payment_id is null\n~~~\t\n\n\n\n\n# Lista funkcji\nhttps://docs.microsoft.com/en-us/sql/t-sql/functions\n\nhttps://www.tutorialspoint.com/t_sql/t_sql_functions.htm\n\n\n# Pobieranie danych do Excela za pomocą zapytania SQL\nhttps://www.mssqltips.com/sqlservertip/4585/using-microsoft-query-in-excel-to-retreive-sql-server-data/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsulmar%2Fdsm.sql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsulmar%2Fdsm.sql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsulmar%2Fdsm.sql/lists"}