CodeGym /Kursy /SQL SELF /Typowe błędy przy sortowaniu i formatowaniu danych

Typowe błędy przy sortowaniu i formatowaniu danych

SQL SELF
Poziom 6 , Lekcja 4
Dostępny

Sortowanie i formatowanie — to logiczne i przydatne. Ale czasem można się nieźle pogubić i dostać zaskakujące wyniki. Zobaczmy razem najczęstsze błędy, żeby Twoje dane zawsze wyglądały idealnie i były w odpowiedniej kolejności!

1. Sortowanie danych różnych typów

Wyobraź sobie sytuację: sortujesz tabelę po kolumnie, która zawiera mieszankę liczb i stringów. PostgreSQL oczywiście spróbuje Ci pomóc, ale wynik może Cię zaskoczyć. Na przykład masz tabelę, gdzie value to tekst:

id value
1 10
2 2
3 apple
4 20

I piszesz zapytanie:

SELECT *
FROM mixed_data 
ORDER BY value;

Oczekiwany wynik? Może: 2, 10, 20, apple? Nie, PostgreSQL sortuje stringi na podstawie porządku leksykalnego/alfabetycznego, więc wynik będzie: 10, 2, 20, apple.

Jak uniknąć błędu?

Jeśli wiesz, że Twoja kolumna tekstowa zawiera dane liczbowe, jawnie przekonwertuj je na liczbę przed sortowaniem:

SELECT * FROM mixed_data ORDER BY value::INT;

Teraz wynik będzie: 2, 10, 20.

Ale uważaj: jeśli w Twojej kolumnie pojawią się stringi, których nie da się przekonwertować na liczbę, zapytanie rzuci błąd!

2. Podanie kilku kolumn do sortowania

Jeden z typowych błędów — zapomnieć o kolejności priorytetów przy sortowaniu po kilku kolumnach. Na przykład, chcesz posortować studentów po nazwisku, a potem po wieku, ale pomyliłeś kolejność:

id last_name age
1 Lin 18
2 Lin 20
3 Song 19

Twoje zapytanie:

-- Zła kolejność sortowania
SELECT * 
FROM students 
ORDER BY age, last_name;

Wynik:

id last_name age
1 Lin 18
3 Song 19
2 Lin 20

W tym przypadku PostgreSQL najpierw posortuje studentów po wieku, a dopiero potem po nazwisku. Nie do końca o to chodziło, prawda?

Poprawne zapytanie:

SELECT *
FROM students 
ORDER BY last_name, age;

Wynik:

id last_name age
1 Lin 18
2 Lin 20
3 Song 19

Teraz sortowanie najpierw idzie po nazwisku, a w ramach nazwiska — po wieku. Dokładnie tak, jak trzeba!

3. Sortowanie z różnymi kierunkami

Czasem trzeba zrobić sortowanie z różnymi kierunkami dla kolumn. Na przykład, posortować produkty po kategorii (rosnąco), a w ramach kategorii — po cenie (malejąco). Błąd pojawia się, jeśli zapomnisz podać kierunek dla drugiej kolumny:

id category price
1 Electronics 99.99
2 Electronics 199.99
3 Furniture 299.99
4 Furniture 199.99

Twoje zapytanie:

-- Zła kolejność sortowania
SELECT * 
FROM products 
ORDER BY category, price;

Wynik: ceny w ramach kategorii są posortowane rosnąco, a może chciałeś malejąco.

Poprawne zapytanie:

SELECT *
FROM products 
ORDER BY category ASC, price DESC;

Błędy przy formatowaniu

4. Złe użycie CONCAT()

Załóżmy, że chcesz połączyć imię i nazwisko w jeden string, ale w pośpiechu zapominasz dodać separator między nimi:

id first_name last_name
1 John Doe
2 Jane Smith

Twoje zapytanie:

SELECT
    CONCAT(first_name, last_name) AS full_name 
FROM employees;

Wynik:

full_name
JohnDoe
JaneSmith

Jak to poprawić?

Dodaj spację między imieniem a nazwiskiem:

SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;

Teraz wszystko wygląda dużo lepiej:

full_name
John Doe
Jane Smith

5. Błędy przy użyciu CAST()

Załóżmy, że próbujesz przekonwertować datę na string, żeby ładnie ją wyświetlić, ale zapominasz podać format:

id event_date
1 2023-01-15

Twoje zapytanie:

-- Zła konwersja
SELECT 
    CAST(event_date AS TEXT) 
FROM events;

Wynik: data zostanie przekonwertowana do formatu YYYY-MM-DD, co nie zawsze jest wygodne dla użytkowników.

Jak to poprawić?

Użyj funkcji TO_CHAR(), żeby podać format:

SELECT
    TO_CHAR(event_date, 'DD-MM-YYYY') AS formatted_date 
FROM events;

Teraz data będzie wyświetlana w formacie 15-01-2023.

6. Błędy przy użyciu DISTINCT

DISTINCT — potężne narzędzie do wyciągania unikalnych wartości, ale czasem jest używane źle. Na przykład, chcesz dostać listę unikalnych imion pracowników:

SELECT DISTINCT first_name, last_name
FROM employees;

Na pierwszy rzut oka zapytanie wygląda OK, ale jeśli dwóch pracowników ma takie samo imię i nazwisko, pojawią się jako jeden wynik, nawet jeśli to różne osoby.

Przykład danych:

id first_name last_name
1 Alex Lin
2 Maria Chi
3 Alex Lin

Wynik zapytania:

first_name last_name
Alex Lin
Maria Chi

Jak uniknąć błędu?

Dodaj klucz główny, żeby zagwarantować unikalność:

SELECT DISTINCT ON (id) first_name, last_name
FROM employees;

Wynik zapytania z DISTINCT ON (id):

id first_name last_name
1 Alex Lin
2 Maria Chi
3 Alex Lin

Jak unikać błędów?

Praca z danymi wymaga uwagi do szczegółów. Żeby uniknąć powyższych błędów:

Sprawdzaj typy danych: upewnij się, że używane funkcje obsługują typy danych Twoich kolumn.

Sprawdzaj kolejność sortowania: upewnij się, że kolumny są podane w dobrej kolejności. Nie zapominaj o kierunkach sortowania ASC, DESC.

Testuj zapytania na małych próbkach danych: to pomoże wyłapać błędy na wczesnym etapie.

Nie zapominaj o dokumentacji PostgreSQL: ona pomoże odpowiedzieć na trudne pytania o funkcje i ich użycie. Tutaj link: oficjalna dokumentacja PostgreSQL.

Teraz jesteś gotowy na każdą zagadkę związaną z formatowaniem i sortowaniem! Lecimy dalej.

1
Ankieta/quiz
Wyodrębnianie unikalnych wartości, poziom 6, lekcja 4
Niedostępny
Wyodrębnianie unikalnych wartości
Wyodrębnianie unikalnych wartości
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION