Təsəvvür elə ki, sən çox böyük bir tələbə bazası ilə işləyirsən. Onları təkcə soyadına görə sıralamaq artıq faydalıdır, amma təsəvvür elə ki, cədvəldə eyni soyadlı tələbələr var. Belə halda, nəticəni daha oxunaqlı etmək üçün ad sütununa görə də sıralama əlavə edə bilərsən. Və ya başqa bir nümunə: sifarişlərin siyahısını əvvəlcə tarixə, sonra isə sifarişin ümumi məbləğinə görə sıralamaq istəyirsən. Bax, burada bir neçə sütuna görə sıralama köməyə gəlir.
Bir neçə sütuna görə sıralama sənə imkan verir: 1. Məlumatları dəqiq müəyyən olunmuş qaydada düzəsən; 2. Sıralama prioritetlərini idarə edəsən (əvvəl bir sütuna, sonra digərinə görə); 3. Məlumatları daha strukturlaşdırılmış və oxunaqlı şəkildə çıxarasan.
Bir neçə sütuna görə sıralamanın sintaksisi
Məlumatları bir neçə sütuna görə sıralamaq üçün tanış ORDER BY operatorundan istifadə olunur, amma indi bir neçə sütunu vergüllə ayırıb yazırsan. PostgreSQL əvvəlcə birinci sütuna görə sıralayır, sonra (əgər dəyərlər eynidirsə) ikinciyə, və s.
Ümumi sintaksis belədir:
SELECT sütunlar
FROM cədvəl
ORDER BY sütun1 istiqamet1, sütun2 istiqamet2, ... ;
Burada:
sütun1,sütun2, ... — sıralamaq istədiyin sütunlardır.istiqamet1,istiqamet2, ... — sıralama istiqamətidir (ASC— artan,DESC— azalan).- Bu parametr məcburi deyil, default olaraq
ASCistifadə olunur.
Nümunə 1: Tələbələri əvvəlcə soyadına, sonra adına görə sıralamaq
Təsəvvür elə students cədvəlimiz var və orada tələbələr haqqında məlumatlar var:
| id | first_name | last_name | age |
|---|---|---|---|
| 1 | Anna | Lin | 20 |
| 2 | Victor | Lin | 22 |
| 3 | Maria | Kim | 21 |
| 4 | Otto | Lin | 23 |
| 5 | Anna | Kim | 20 |
Bizim məqsədimiz — tələbələri əvvəlcə soyadına (last_name), sonra adına (first_name) görə sıralamaqdır.
SELECT id, first_name, last_name, age
FROM students
ORDER BY last_name ASC, first_name ASC;
Nəticə:
| id | first_name | last_name | age |
|---|---|---|---|
| 5 | Anna | Kim | 20 |
| 3 | Maria | Kim | 21 |
| 1 | Anna | Lin | 20 |
| 4 | Otto | Lin | 23 |
| 2 | Victor | Lin | 22 |
Gördüyün kimi, sətirlər əvvəlcə soyadına görə (Kim, sonra Lin), sonra isə adına görə (Anna, Maria və s.) düzülüb. Bu xüsusilə faydalıdır, əgər siyahıda kimisə tez tapmaq və ya jurnal sıralamaq lazımdırsa.
Nümunə 2: Sifarişləri tarixə və məbləğə görə sıralamaq
Təsəvvür elə orders cədvəlimiz var və orada sifarişlər haqqında məlumatlar var:
| order_id | customer_id | order_date | total |
|---|---|---|---|
| 1 | 101 | 2025-10-01 | 500 |
| 2 | 102 | 2025-10-03 | 200 |
| 3 | 103 | 2025-10-02 | 300 |
| 4 | 104 | 2025-10-01 | 100 |
| 5 | 101 | 2025-10-03 | 600 |
Biz istəyirik ki, sifarişlər əvvəlcə order_date sütununa görə, sonra isə total sütununa görə azalan qaydada sıralansın.
SQL-sorğusu:
SELECT order_id, customer_id, order_date, total
FROM orders
ORDER BY order_date ASC, total DESC;
Nəticə:
| order_id | customer_id | order_date | total |
|---|---|---|---|
| 1 | 101 | 2025-10-01 | 500 |
| 4 | 104 | 2025-10-01 | 100 |
| 3 | 103 | 2025-10-02 | 300 |
| 5 | 101 | 2025-10-03 | 600 |
| 2 | 102 | 2025-10-03 | 200 |
Gördüyün kimi, eyni tarixli sifarişlər də məbləğə görə sıralanır.
Sıralamada NULL ilə işləmək: NULLS FIRST və NULLS LAST
SQL-də xüsusi bir dəyər var - NULL, yəni dəyər yoxdur deməkdir. Bununla necə işləmək barədə bir neçə səviyyə sonra danışacağıq. Amma indi yaxşı vaxtdır ki, sıralamada onunla necə davranmaq olar, göstərim.
Sən sütunları sıralayanda, hansı ki NULL dəyərlər var, PostgreSQL qərar verməlidir ki, boş dəyərlər harada olsun: əvvəl, yoxsa axırda.
Default olaraq:
ORDER BY ... ASCzamanı:NULLaxırda olur (NULLS LAST)ORDER BY ... DESCzamanı:NULLəvvəldə olur (NULLS FIRST)
Bəzən bu davranış əlverişli olmur — və sən bunu NULLS FIRST və ya NULLS LAST ilə açıq şəkildə idarə edə bilərsən.
Sintaksis:
ORDER BY sütun ASC NULLS FIRST
ORDER BY sütun DESC NULLS LAST
Nümunə: qiymətlərə görə sıralama, burada NULL — "qiymət hələ qoyulmayıb"
SELECT student_id, grade
FROM grades
ORDER BY grade DESC NULLS LAST;
Beləliklə, əvvəlcə ən yaxşı tələbələr, sonra zəiflər, ən axırda isə hələ qiyməti olmayanlar (NULL) çıxacaq.
Nümunə: əksinə — qiyməti olmayan tələbələri birinci göstərmək
Tutaq ki, grades cədvəlimiz var və bəzi tələbələrin hələ qiyməti yoxdur (NULL):
| student_id | grade |
|---|---|
| 101 | NULL |
| 102 | 85 |
| 103 | NULL |
| 104 | 92 |
| 105 | 76 |
Biz istəyirik ki, əvvəlcə qiyməti olmayan tələbələr çıxsın, sonra isə qalanlar artan qaydada sıralansın.
SELECT student_id, grade
FROM grades
ORDER BY grade ASC NULLS FIRST;
Nəticə:
| student_id | grade |
|---|---|
| 101 | NULL |
| 103 | NULL |
| 105 | 76 |
| 102 | 85 |
| 104 | 92 |
NULLS FIRST operatoru ORDER BY grade ASC ilə birlikdə təmin edir ki, NULL olan qeydlər əvvəl çıxsın, sonra isə qiymətlər artan qaydada düzülür.
Xüsusiyyətlər və tipik səhvlər haqqında
Yeni başlayanlar tez-tez hər sütun üçün sıralama istiqamətini göstərməyi unudurlar. Əgər istiqaməti göstərməsən, PostgreSQL default olaraq ASC götürür. Həmçinin, ORDER BY içində sütunların sırası vacibdir: əvvəlcə birinci sütuna görə sıralanır, yalnız birinci sütunun dəyərləri eyni olanda ikinciyə görə sıralama tətbiq olunur.
GO TO FULL VERSION