18 Eylül 2014 Perşembe

Select Cümleleri ve Table Buffer kavramı : Sıralama ve Gruplama (Ordering, grouping and aggregation)

Select cümlecikleri ile sıralama yapmak için 3 yöntem kullanılabilir.
  1. Index ya da index hint
  2. order by
  3. group by
Şimdi sırayla bunları inceleyelim:
1. Index ya da index hint : Tabloda varolan bir indexi kullanmak için index anahtar sözcüğü kullanılabilir. Bu sözcük kullanıldığında sorguda kesinlikle belirtilen indexe göre sıralama yapılır. Index hint ise önerilen indeks olarak anılabilir. SQL Server’ın tuttuğu istatistiklerde belirtilen indeks uygun bulunursa kullanılır, aksi taktirde yoksayılır. Bu konudaki best practise where kriterindeki alanları barındıran indeksleri kullanmaya çalışmaktır.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CustTable custTable;
;
while select custTable
    index AccountIdx
    {
        info(strFmt("%1 %2", custTable.AccountNum, custTable.Name));
    }
    //--------------------------------
while select custTable
    index hint AccountIdx
    {
        info(strFmt("%1 %2", custTable.AccountNum, custTable.Name));
    }
2. Order By : Bilinen en eski sıralama şeklidir. Tabloda bulunan herhangibir alan order by ile kullanılarak sıralanabilir. Bu konudaki best practise kullanılacak alan indekslenmiş olmasıdır.
1
2
3
4
5
while select custTable
    order by custTable.AccountNum
    {
        info(strFmt("%1 %2", custTable.AccountNum, custTable.Name));
    }
3. Group By : Gruplama fonksiyonu genellikle kümeleme fonksiyonları ile birlikte kullanılır. Kümeleme fonksiyonları sum, count, avg, maxof ve minof (sırasıyla; topla, say, ortalama, en büyük, en küçük) ile ifade edilir. Grup by kullanıldığında kullanılabilecek alanlar sadece tablodaki gruplama ve kümeleme alanlarıdır. Bir sorguda bir alan sadece bir kümeleme için kullanılabilir. Yani bir sorguda aynı alan hem sum, hem count yapılamaz.
1
2
3
4
5
6
7
8
9
10
11
CustTrans custTrans;
;
while select sum(AmountMst), count(recId) from custTrans
    group by Accountnum
    {
       info(strFmt("Müşteri hesabı : %1, Bakiye : %2, İşlem adedi : %3",
                             custTrans.AccountNum,
                             custTrans.AmountMst,
                             custTrans.RecId));
    }
//Dikkat : sadece accountNum, AmountMst ve RecId alanında veri bulunur.

Hiç yorum yok:

Yorum Gönder