CodeGym /Kurslar /SQL SELF /Məlumatların sıralanması və formatlaşdırılmasında tipik s...

Məlumatların sıralanması və formatlaşdırılmasında tipik səhvlər

SQL SELF
Səviyyə, Dərs
Mövcuddur

Sıralama və formatlaşdırma — həm məntiqli, həm də faydalıdır. Amma bəzən təsadüfən çaşıb, gözlənilməz nəticələr ala bilərsən. Gəlin birlikdə ən çox rast gəlinən səhvləri araşdıraq ki, sənin məlumatların həmişə ideal görünsün və düzgün ardıcıllıqla getsin!

1. Fərqli tiplərdə olan məlumatların sıralanması

Təsəvvür elə ki, bir cədvəli elə bir sütuna görə sıralayırsan ki, orada həm rəqəmlər, həm də sətirlər (string) qarışıqdır. PostgreSQL əlindən gələni edəcək, amma nəticə səni təəccübləndirə bilər. Məsələn, səndə value sütunu mətn olan bir cədvəl var:

id value
1 10
2 2
3 alma
4 20

Və sən belə bir sorğu yazırsan:

SELECT *
FROM mixed_data 
ORDER BY value;

Gözlənilən nəticə? Bəlkə də: 2, 10, 20, alma? Yox, PostgreSQL sətirləri leksikoqrafik/əlifba sırası ilə sıralayır və nəticə belə olacaq: 10, 2, 20, alma.

Səhvdən necə qaçmaq olar?

Əgər bilirsən ki, mətn sütununda rəqəmlər var, sıralamadan əvvəl onları açıq şəkildə rəqəmə çevir:

SELECT * FROM mixed_data ORDER BY value::INT;

İndi nəticə belə olacaq: 2, 10, 20.

Amma ehtiyatlı ol: əgər sütunda rəqəmə çevrilə bilməyən sətir olsa, sorğu səhv verəcək!

2. Sıralama üçün bir neçə sütunun göstərilməsi

Tipik səhvlərdən biri — bir neçə sütuna görə sıralayanda prioritet ardıcıllığını unutmaqdır. Məsələn, tələbələri soyadına, sonra isə yaşına görə sıralamaq istəyirsən, amma ardıcıllığı səhv salırsan:

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

Sənin sorğun:

-- Səhv sıralama
SELECT * 
FROM students 
ORDER BY age, last_name;

Nəticə:

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

Bu halda PostgreSQL əvvəlcə tələbələri yaşa görə, sonra isə soyadına görə sıralayacaq. Sən isə başqa cür istəmişdin, düzdür?

Düzgün sorğu:

SELECT *
FROM students 
ORDER BY last_name, age;

Nəticə:

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

İndi sıralama əvvəlcə soyadına, sonra isə soyad daxilində yaşa görə gedir. Elə istədiyin kimi!

3. Fərqli istiqamətlərlə sıralama

Bəzən bir neçə sütun üçün eyni anda fərqli istiqamətdə sıralama etmək lazımdır. Məsələn, məhsulları kateqoriyaya görə (artan), hər kateqoriya daxilində isə qiymətə görə (azalan) sıralamaq. Səhv isə ikinci sütun üçün istiqaməti göstərməyi unutmaqdır:

id category price
1 Elektronika 99.99
2 Elektronika 199.99
3 Mebel 299.99
4 Mebel 199.99

Sənin sorğun:

-- Səhv sıralama
SELECT * 
FROM products 
ORDER BY category, price;

Nəticə: kateqoriya daxilində qiymətlər artan sıralanır, amma sən bəlkə də azalan istəmişdin.

Düzgün sorğu:

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

Formatlaşdırmada səhvlər

4. CONCAT() funksiyasının səhv istifadəsi

Tutaq ki, ad və soyadı bir sətirdə birləşdirmək istəyirsən, amma tələsik aralarına boşluq qoymağı unudursan:

id first_name last_name
1 John Doe
2 Jane Smith

Sənin sorğun:

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

Nəticə:

full_name
JohnDoe
JaneSmith

Necə düzəltmək olar?

Ad və soyad arasında boşluq əlavə et:

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

İndi hər şey daha gözəl görünəcək:

full_name
John Doe
Jane Smith

5. CAST() istifadəsində səhvlər

Tutaq ki, tarixi sətirə çevirmək istəyirsən ki, gözəl görünsün, amma formatı göstərməyi unudursan:

id event_date
1 2023-01-15

Sənin sorğun:

-- Səhv çevirmə
SELECT 
    CAST(event_date AS TEXT) 
FROM events;

Nəticə: tarix YYYY-MM-DD formatında olacaq, bu isə istifadəçilər üçün həmişə rahat olmur.

Necə düzəltmək olar?

Formatı göstərmək üçün TO_CHAR() funksiyasından istifadə et:

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

İndi tarix belə görünəcək: 15-01-2023.

6. DISTINCT istifadəsində səhvlər

DISTINCT — unikal dəyərləri çıxarmaq üçün güclü alətdir, amma bəzən səhv istifadə olunur. Məsələn, işçilərin unikal adlarının siyahısını almaq istəyirsən:

SELECT DISTINCT first_name, last_name
FROM employees;

İlk baxışda sorğu düz görünür, amma iki işçinin adı və soyadı eyni olsa, onlar bir nəticə kimi çıxacaq, baxmayaraq ki, fərqli adamlardır.

Məlumat nümunəsi:

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

Sorğunun nəticəsi:

first_name last_name
Alex Lin
Maria Chi

Səhvdən necə qaçmaq olar?

Unikallığı təmin etmək üçün primary key əlavə et:

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

DISTINCT ON (id) ilə sorğunun nəticəsi:

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

Səhvlərdən necə qaçmaq olar?

Məlumatlarla işləmək detallara diqqət tələb edir. Yuxarıda göstərilən səhvlərdən qaçmaq üçün:

Məlumat tiplərini yoxla: istifadə etdiyin funksiyaların sütun tiplərini dəstəklədiyinə əmin ol.

Sıralama ardıcıllığını yoxla: sütunların düzgün ardıcıllıqla göstərildiyinə əmin ol. Sıralama istiqamətlərini ASC, DESC unutma.

Sorğuları kiçik nümunə məlumatlarda test et: bu, səhvləri erkən aşkar etməyə kömək edəcək.

PostgreSQL sənədlərini unutma: funksiyalar və onların istifadəsi ilə bağlı çətin suallara cavab tapmaq üçün kömək edəcək. Bax burda: rəsmi PostgreSQL sənədləri.

İndi sən formatlaşdırma və sıralama ilə bağlı bütün tapmacalara hazır olacaqsan! Davam edirik.

2
Tapşırıq
SQL SELF, səviyyə, dərs
Bağlanıb
Sətirin ayırıcı ilə formatlaşdırılması
Sətirin ayırıcı ilə formatlaşdırılması
2
Tapşırıq
SQL SELF, səviyyə, dərs
Bağlanıb
Bir neçə sütun üzrə fərqli istiqamətlərdə sıralama
Bir neçə sütun üzrə fərqli istiqamətlərdə sıralama
1
Sorğu/viktorina
, səviyyə, dərs
Əlçatan deyil
Unikal dəyərlərin çıxarılması
Unikal dəyərlərin çıxarılması
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION