Sortowanie i formatowanie danych to ważne skille, które pozwalają przygotowywać czytelne raporty, optymalizować analizę danych i poprawiać interakcję z użytkownikami. Te umiejętności przydadzą ci się przy tworzeniu raportów analitycznych, przygotowywaniu danych do eksportu, a także w codziennej pracy z bazami danych. W praktyce często trafisz na zadania, gdzie trzeba ładnie sformatować dane, usunąć powtarzające się rekordy i posortować info dla wygody. Tym właśnie się dziś zajmiemy!
Przykład 1: Tworzenie listy unikalnych klientów z połączonym imieniem i nazwiskiem, posortowanej po nazwisku
Mamy tabelę customers, gdzie trzymamy dane o klientach:
| id | first_name | last_name | city |
|---|---|---|---|
| 1 | Alex | Lin | New York |
| 2 | Maria | Chi | Los Angeles |
| 3 | Alex | Lin | New York |
| 4 | Anna | Song | Chicago |
Naszym celem jest:
- Połączyć
first_nameilast_namew jedną kolumnęfull_name. - Wyciągnąć tylko unikalnych klientów.
- Posortować listę po nazwisku (
last_name).
Zapytanie SQL
SELECT DISTINCT
CONCAT(first_name, ' ', last_name) AS full_name,
city
FROM customers
ORDER BY last_name;
| full_name | city |
|---|---|
| Maria Chi | Los Angeles |
| Alex Lin | New York |
| Anna Song | Chicago |
Zwróć uwagę, że powtarzające się rekordy Alex Lin zostały usunięte dzięki DISTINCT, a cała lista została posortowana po nazwisku alfabetycznie.
Przykład 2: Formatowanie danych o zamówieniach i ich sortowanie
W tabeli orders trzymamy dane o zamówieniach:
| order_id | customer_name | order_date | total_amount |
|---|---|---|---|
| 1 | Alex Lin | 2023-10-01 | 1500 |
| 2 | Maria Chi | 2023-10-02 | 2000 |
| 3 | Alex Lin | 2023-10-03 | 1500 |
| 4 | Anna Song | 2023-10-04 | 3000 |
Naszym celem jest:
- Stworzyć kolumnę
formatted_order_date, gdzie data zamówienia będzie w formacie DD-MM-YYYY. - Usunąć powtarzające się rekordy klienta i daty (zostawić unikalne kombinacje
customer_nameiorder_date). - Posortować zamówienia po dacie malejąco.
- Zapytanie SQL
SELECT DISTINCT
customer_name,
TO_CHAR(order_date, 'DD-MM-YYYY') AS formatted_order_date,
total_amount
FROM orders
ORDER BY order_date DESC;
Wynik:
| customer_name | formatted_order_date | total_amount |
|---|---|---|
| Anna Song | 04-10-2023 | 3000 |
| Alex Lin | 03-10-2023 | 1500 |
| Maria Chi | 02-10-2023 | 2000 |
Zobacz, jak dzięki funkcji TO_CHAR() zamieniliśmy datę na format DD-MM-YYYY, a dzięki DISTINCT wywaliliśmy powtarzające się rekordy.
Przykład 3: Wyciąganie unikalnych kombinacji "imię + nazwisko" studentów i sortowanie po nazwisku i dacie urodzenia
W tabeli students są dane o studentach:
| student_id | first_name | last_name | birth_date |
|---|---|---|---|
| 1 | Alex | Lin | 2001-03-15 |
| 2 | Maria | Chi | 2000-06-20 |
| 3 | Alex | Lin | 2001-03-15 |
| 4 | Anna | Song | 1999-10-10 |
Naszym celem jest:
- Połączyć imię i nazwisko w jedną kolumnę
full_name. - Wyciągnąć unikalne kombinacje "imię + nazwisko".
- Posortować studentów po nazwisku, a potem po dacie urodzenia.
SELECT DISTINCT
CONCAT(first_name, ' ', last_name) AS full_name,
birth_date
FROM students
ORDER BY last_name, birth_date;
Wynik:
| full_name | birth_date |
|---|---|
| Maria Chi | 2000-06-20 |
| Alex Lin | 2001-03-15 |
| Anna Song | 1999-10-10 |
Szczególna uwaga: dwa takie same rekordy studenta "Alex Lin" zostały połączone w jeden wiersz, a sortowanie odbyło się najpierw po nazwisku, potem po dacie urodzenia.
Zadanie praktyczne
Wykorzystaj dzisiejszą wiedzę do rozwiązania tego zadania:
Zadanie: Masz tabelę products, która zawiera takie dane:
| product_id | category | product_name | price |
|---|---|---|---|
| 1 | Elektronika | Telefon | 50000 |
| 2 | Odzież | Kurtka | 8000 |
| 3 | Elektronika | Laptop | 70000 |
| 4 | Odzież | Kurtka | 8000 |
- Stwórz kolumnę
formatted_product, gdzieproduct_namebędzie połączone z kategorią przez myślnik, np.:Telefon - Elektronika. - Usuń powtarzające się kombinacje
product_nameicategory. - Posortuj produkty po kategorii, a potem po cenie (od najtańszego do najdroższego).
Poniżej masz strukturę zapytania do tego zadania:
SELECT DISTINCT
CONCAT(product_name, ' - ', category) AS formatted_product,
price
FROM products
ORDER BY category, price ASC;
Spróbuj samodzielnie wyobrazić sobie wynik tego zapytania!
Używanie funkcji CONCAT(), DISTINCT i ORDER BY pozwala osiągnąć wysoką czytelność i strukturę danych, co jest mega ważne w prawdziwych projektach i zadaniach. Upewnij się, że ogarniasz, jak je łączyć, ćwicząc na przykładach!
GO TO FULL VERSION