Bu eğitimde, alt toplamlar ve toplamlar oluşturmak için MySQL ROLLUP yan tümcesini nasıl kullanacağınızı öğreneceksiniz.
Örnek bir tablo oluşturma
Aşağıdaki ifade, ürün satırlarına ve yıllara göre özetlenen sipariş değerlerini saklayan satış adında yeni bir tablo oluşturur. Veriler, örnek veritabanındaki ürünlerden, siparişlerden ve orderDetails tablolarından gelir.
Aşağıdaki ifade, öğrencilerin yıllara göre aldıkları kitapların tarihlerinin bir özetini göstermektedir. Özet tablo islemDetay adında öğrencilerin yıllara göre adlıkları kitaplar ve öğrenci adı ve soyadı bilgilerini içermektedir.
1 2 3 4 5 6 7 8 9 10 11 12 13 | CREATE TABLE islemDetay SELECT islem.ogrno, ograd, ogrsoyad, YEAR(islem.atarih) as 'YIL', COUNT(islem.atarih) as 'ADET' FROM ogrenci INNER JOIN islem ON islem.ogrno=ogrenci.ogrno GROUP BY islem.ogrno, YIL |
Aşağıdaki sorgu tüm islemDetay ‘ını görüntüler.
1 2 3 | SELECT * from islemDetay |
MySQL ROLLUP genel bakış
Gruplama, gruplamak istediğiniz sütunlar kümesidir. Örneğin, aşağıdaki sorgu yıllara göre alınan kitapların bir gruplama listesi oluşturur.
1 2 3 4 5 6 7 8 | SELECT YIL, SUM(ADET) FROM islemDetay GROUP BY YIL |
Aşağıdaki sorgu ile gösterilen boş bir gruplama kümesi oluşturur:
1 2 3 4 5 | SELECT SUM(ADET) TUM_ISLEMLER FROM islemDetay |
Tek bir sorguda iki veya daha fazla gruplama grubu oluşturmak istiyorsanız, UNION ALL operatörünü aşağıdaki gibi kullanabilirsiniz:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SELECT YIL, SUM(ADET) FROM islemDetay GROUP BY YIL UNION ALL SELECT NULL, SUM(ADET) TUM_ISLEMLER FROM islemDetay |
UNION ALL tüm sorguların aynı sayıda sütuna sahip olmasını gerektirdiğinden, bu gereksinimi yerine getirmek için ikinci sorgunun seçim listesine NULL ekledik.
Bu sorgu, toplam islem değerlerini yıllara göre islem satırlarına ve ayrıca genel toplam satırına göre üretebilir. Ancak, iki sorununu çözmek gerekecekti:
- Sorgu oldukça uzundur.
- Veritabanının motorunun dahili olarak iki ayrı sorgu yürütmesi ve sonuç kümelerini bir araya getirmesi gerektiğinden sorgunun performansı iyi olmayabilir.
Bu sorunları çözmek için ROLLUP yan tümcesini kullanabilirsiniz.
ROLLUP yan tümcesi GROUP BY yan tümcesinin aşağıdaki sözdizimiyle bir uzantısıdır:
1 2 3 4 5 6 7 8 | SELECT select_list FROM table_name GROUP BY c1, c2, c3 WITH ROLLUP; |
ROLLUP, GROUP BY deyiminde belirtilen sütunlara veya ifadelere dayalı olarak birden fazla gruplama grubu oluşturur.
Aşağıdaki sorguya bakınız:
1 2 3 4 5 6 7 | SELECT YIL, SUM(ADET) TUM_ISLEMLER FROM islemDetay GROUP BY YIL WITH ROLLUP |
Çıktıda açıkça gösterildiği gibi, ROLLUP deyimi yalnızca alt toplamları değil, aynı zamanda işlemlerin değerlerinin toplamını da oluşturur.
GROUP BY deyiminde belirtilen birden fazla sütununuz varsa, ROLLUP deyimi giriş sütunları arasında bir hiyerarşi varsayar.
1 2 3 4 5 6 7 8 9 10 11 | SELECT ogrno, YIL, SUM(ADET) FROM islemDetay GROUP BY ogrno, YIL WITH ROLLUP |
Bu eğitimde, GROUP BY deyiminde belirtilen sütunlar arasındaki hiyerarşiyi göz önünde bulundurarak birden fazla gruplama kümesi üretmek için MySQL ROLLUP () yöntemini nasıl kullanacağınızı öğrendiniz.
1 Yorum