Jeden z najpopularniejszych scenariuszy pracy z bazami danych to przygotowanie danych do raportowania. Wyobraź sobie sytuację: pracujesz na uniwersytecie, a twój szef (który oczywiście nie ogarnia SQL-a) prosi cię o stworzenie listy studentów z połączonym imieniem i nazwiskiem oraz podaniem daty urodzenia w formacie DD-MM-YYYY. Zadanie jest jasne: trzeba ładnie ogarnąć dane. I tutaj SQL jest naszym ziomkiem.
Przykład 1: Łączenie imienia i nazwiska
Zacznijmy od połączenia imienia (first_name) i nazwiska (last_name) studentów z naszej tabeli students.
SELECT
CONCAT(first_name, ' ', last_name) AS full_name
FROM
students;
Co tu się dzieje?
CONCAT()łączy stringi. Dodajemy spację między imieniem a nazwiskiem, żeby było czytelniej.- Wynik ląduje w nowej kolumnie
full_name.
Wynik może wyglądać tak:
| full_name |
|---|
| Otto Art |
| Anna Song |
| Pol Mac |
Przykład 2: Formatowanie daty
Teraz dorzucimy do naszego zapytania formatowanie daty urodzenia.
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM
students;
Co nowego?
- Używamy funkcji
TO_CHAR()na polubirth_date. - Format
'DD-MM-YYYY'zamienia datę na wygodny widok (np.:25-12-2001).
Wynik:
| full_name | formatted_birth_date |
|---|---|
| Otto Art | 12-04-1995 |
| Anna Song | 03-08-1996 |
| Pol Mac | 21-11-1997 |
Voilà! Właśnie stworzyłeś ładny raport.
Formatowanie do eksportu danych
Załóżmy, że jeden z twoich ziomków chce wyeksportować dane o zamówieniach do pliku CSV, żeby potem ogarniać je w Excelu. Ale dane w bazie są w niewygodnym dla niego formacie, a ludzie ze sprzedaży chcą konkretny wygląd. Na przykład, zamiast pola total_price, gdzie jest cena zamówienia, chcą widzieć ją w formacie: $100.00.
Przykład 3: Konwersja liczb do formatu walutowego
Ogarnijmy dane o zamówieniach z tabeli orders do eksportu:
SELECT
order_id,
TO_CHAR(total_price, 'FM$999,999.00') AS formatted_price
FROM
orders;
Co robi TO_CHAR() w tym przypadku?
FM(Fill Mode) wywala niepotrzebne spacje.$dodaje symbol waluty.999,999.00ustawia format z separatorami tysięcy i dwoma miejscami po przecinku.
Wynik:
| order_id | formatted_price |
|---|---|
| 1 | $1,000.00 |
| 2 | $2,500.50 |
| 3 | $10.00 |
Teraz twój kolega może łatwo wrzucić dane do Excela i pochwalić cię na spotkaniu.
Finałowe zadanie
I tu zaczyna się najciekawsze. Połączmy wszystkie skillsy, które już masz.
Zadanie
Stwórz zapytanie do tabeli students, które:
- Łączy imię i nazwisko w jedną kolumnę
full_name. - Konwertuje datę urodzenia do formatu
DD-MM-YYYY. - Pokazuje wiek studenta na dziś.
Zapytanie będzie wyglądać mniej więcej tak:
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date,
DATE_PART('year', AGE(birth_date)) AS age
FROM
students;
Nowe elementy:
AGE(birth_date)zwraca różnicę między dzisiejszą datą a datą urodzenia, ale w formacie lat, miesięcy i dni.DATE_PART('year', AGE(birth_date))wyciąga z tego tylko liczbę lat.
Wynik:
| full_name | formatted_birth_date | age |
|---|---|---|
| Otto Art | 12-04-1995 | 28 |
| Anna Song | 03-08-1996 | 27 |
| Pol Mac | 21-11-1997 | 25 |
Taki raport zadowoli nawet najbardziej upierdliwych kolegów.
Formatowanie pod konkretne warunki
Czasem formatowanie danych jest potrzebne do warunków lub filtrowania. Na przykład, wyciągnijmy studentów, którzy mają urodziny w tym miesiącu.
Przykład 4: Filtrowanie po miesiącu
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM
students
WHERE
DATE_PART('month', birth_date) = DATE_PART('month', CURRENT_DATE);
Jak to działa?
DATE_PART('month', birth_date)wyciąga miesiąc z daty urodzenia.CURRENT_DATEdaje dzisiejszą datę. Bierzemy z niej miesiąc przezDATE_PART().
Łączenie formatowania i sortowania
Teraz połączmy wszystko, co już wiemy, i dorzućmy sortowanie. Na przykład, zróbmy listę studentów posortowanych po dacie urodzenia.
Przykład 5: Sortowanie po dacie urodzenia
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM
students
ORDER BY
birth_date ASC;
Sortowanie rosnąco ASC pokaże najpierw najstarszych studentów, a malejąco DESC — najmłodszych.
Łączenie z unikalnymi wartościami
Na koniec — zadanie z gwiazdką. Wyobraź sobie, że nasz uniwersytet ma oddziały w kilku miastach i musisz zrobić listę unikalnych miast, gdzie studiują studenci, ale w kolejności alfabetycznej.
Przykład 6: Unikalne wartości i sortowanie
SELECT DISTINCT
city
FROM
students
ORDER BY
city ASC;
Co robi DISTINCT?
Wywala powtarzające się wartości, żeby w wynikach każde miasto było tylko raz.
Po co to wszystko?
Wygoda i wygląd. Jak dane są ładnie ogarnięte, łatwiej się z nimi pracuje, a szefowie mniej marudzą.
Gotowość na życie. Będziesz mógł automatycznie generować raporty, ogarniać eksporty i robić fajne prezentacje.
Podnosisz swoją wartość. SQL to nie tylko dane. To sztuka robienia z nich czegoś czytelnego i przydatnego.
Używaj tych skillsów, żeby nie tylko pisać zapytania, ale tworzyć arcydzieła! Na kolejnych wykładach będziemy dalej odkrywać magię PostgreSQL.
GO TO FULL VERSION