Verilənlər bazası ilə işləyəndə çox vaxt məlumatlarda bir qayda görmək istəyirsən. Məsələn:
- "Mənə ən bahalı 10 məhsulu göstər."
- "Sonuncu sifarişlər hansılardır?"
- "Ən kiçikdən başlayaraq tələbələrin yaşı neçədir?"
Məlumatları qaydaya salmaq istəyi tamamilə təbiidir: hətta super-cool proqramçı olsan belə, xaotik sətrlərlə işləmək heç də xoş deyil. Ona görə də SQL bizə nəticədə qaytarılan sətrləri sıralamaq üçün bir alət verir — ORDER BY operatoru.
ORDER BY ilə sıralamanın əsasları
ORDER BY — nəticə dəstində sətrləri qaydaya salmağa imkan verən sehrli çubuq kimidir. Onsuz məlumatlar "təsadüfi" qaydada qaytarılır (bu, bazanın səhvi deyil, sadəcə qayda zəmanət verilmir).
ORDER BY sintaksisi belə görünür:
SELECT kolonka1, kolonka2
FROM cədvəl
ORDER BY kolonka1 DESC;
kolonka1: sıralamaq istədiyin sütunun adı.ASC: artan qaydada sıralama (default dəyər budur, yəni yazmasan da olar).DESC: azalan qaydada sıralama.
Nümunə
Tutaq ki, bizdə students adlı cədvəl var:
| id | name | age |
|---|---|---|
| 1 | Alex | 22 |
| 2 | Maria | 19 |
| 3 | Otto | 21 |
Gəlin tələbələri yaşa görə (artan qaydada) sıralayaq:
SELECT name, age
FROM students
ORDER BY age ASC;
Nəticə:
| name | age |
|---|---|
| Maria | 19 |
| Otto | 21 |
| Alex | 22 |
Əgər sıralamanı azalan etsək:
SELECT name, age
FROM students
ORDER BY age DESC;
Nəticə belə olacaq:
| name | age |
|---|---|
| Alex | 22 |
| Otto | 21 |
| Maria | 19 |
Bir neçə sütuna görə sıralama
Bəzən bir sütunla sıralamaq kifayət etmir. Təsəvvür et ki, bazada bir neçə tələbə eyni yaşdadır və əlavə qayda, məsələn, ada görə sıralama əlavə etmək istəyirsən.
Bir neçə sütuna görə sıralama:
SELECT kolonka1, kolonka2
FROM cədvəl
ORDER BY kolonka1 DESC, kolonka2 ASC;
Aşağıdakı cədvəl üçün nümunə göstərək:
| id | name | age |
|---|---|---|
| 1 | Alex | 22 |
| 2 | Maria | 19 |
| 3 | Otto | 21 |
| 4 | Anna | 19 |
Sorğu:
SELECT name, age
FROM students
ORDER BY age ASC, name ASC;
Nəticə:
| name | age |
|---|---|
| Anna | 19 |
| Maria | 19 |
| Otto | 21 |
| Alex | 22 |
Burada əvvəlcə yaşa görə (artan) sıralanır, sonra hər yaş daxilində ada görə əlifba sırası ilə düzülür.
Alias-larla sıralama
Əgər sütunlar üçün alias (psevdo-ad) istifadə edirsənsə, bu alias-lara görə də sıralaya bilərsən.
SELECT name AS "Ad", age AS "Yaş"
FROM students
ORDER BY "Yaş" DESC;
Nəticə:
| Ad | Yaş |
|---|---|
| Alex | 22 |
| Otto | 21 |
| Maria | 19 |
Niyə bu vacibdir? Çünki əvvəllər bu mümkün deyildi və hesablanmış sütunlara görə sıralama çətin idi.
Hesablanmış sütunlarla sıralama
SQL-də birbaşa sorğuda hesablamalar aparıb, sonra həmin nəticəyə görə sıralamaq mümkündür.
Nümunə 1. Sadə hesab
SELECT name, age, age * 2 AS doubled_age
FROM students
ORDER BY doubled_age DESC;
Nəticə:
| name | age | doubled_age |
|---|---|---|
| Alex | 22 | 44 |
| Otto | 21 | 42 |
| Maria | 19 | 38 |
Nümunə 2. Funksiyalardan istifadə. Tutaq ki, məhsulların qiymətini products cədvəlində saxlayırıq:
| product_name | price |
|---|---|
| Məhsul A | 100 |
| Məhsul B | 200 |
| Məhsul C | 150 |
İndi isə qiyməti 0.9-a vurub yuvarlaqlaşdıraraq (məsələn, endirimlə) sıralayırıq. ROUND funksiyası rəqəmi istədiyin onluğa qədər yuvarlaqlaşdırır.
SELECT product_name, price, ROUND(price * 0.9, 1) AS discounted_price
FROM products
ORDER BY discounted_price ASC;
Nəticə belə olacaq:
| product_name | price | discounted_price |
|---|---|---|
| Məhsul A | 100 | 90 |
| Məhsul C | 150 | 135 |
| Məhsul B | 200 | 180 |
Sıralamanın praktik tətbiqi
Sıralama aşağıdakı hallarda əsas rol oynayır:
- Hesabatların qurulması, məsələn, ayın ən yaxşı 10 satışını tapmaq.
- İstifadəçi interfeysləri üçün məlumatların çıxarılması, məsələn, sifarişlərin tarixə görə sıralanmış siyahısı.
- Analitika üçün siyahıların yaradılması, məsələn, prioritetə görə qrupların seçilməsi.
ORDER BY istifadə edərkən tipik səhvlər
Səhvlər hər addımda qarşına çıxa bilər. Budur diqqət etməli olduğun bir neçə məqam:
- Əgər mövcud olmayan sütuna görə sıralamağa çalışsan, belə bir səhv alacaqsan:
column "not_a_column" does not exist. - Hesablanmış sütunda istifadə olunan alias-a görə sıralama bəzən qarışıq ola bilər, əgər alias yuxarı səviyyədə verilibsə.
- Sıralama istiqamətini təsadüfən unutdunsa, PostgreSQL default olaraq
ASCtətbiq edəcək. Bu səhv deyil, amma bəzən gözlənilməz nəticələrə səbəb ola bilər.
Artıq bilirsən ki, PostgreSQL-də ORDER BY ilə sıralamaya necə nəzarət etmək olar. Yadda saxla: düzgün təşkil olunmuş məlumat — effektiv SQL sorğularının yarısıdır. Növbəti mövzuya keçirik! 😉
GO TO FULL VERSION