CodeGym /Kurslar /SQL SELF /Bir neçə sütuna görə sıralama: sıralama qaydası və priori...

Bir neçə sütuna görə sıralama: sıralama qaydası və prioritetlər

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

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 ASC istifadə 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 FIRSTNULLS 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 ... ASC zamanı: NULL axırda olur (NULLS LAST)
  • ORDER BY ... DESC zamanı: 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.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION