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.
GO TO FULL VERSION