sql-rollup/
SOURCE:
https://www.sqltutorial.org/sql-rollup/
Özet : Bu eğitimde, ROLLUPbirden fazla gruplama kümesi oluşturmak için SQL'i nasıl kullanacağınızı öğreneceksiniz .
SQL ROLLUP'a Giriş
ROLLUPBir uzantısıdır GROUP BYmadde. ROLLUP Seçenek yaygın genel toplam satırda birlikte süper-agrega satırlar olarak adlandırılan alt toplamları temsil ekstra satırları eklemenize olanak verir. ROLLUP Seçeneği kullanarak, birden çok gruplama kümesi oluşturmak için tek bir sorgu kullanabilirsiniz .
Bir gruplama kümesinin, grupladığınız bir dizi sütun olduğunu unutmayın. Örneğin, depoya göre envanteri döndüren bir sorgu, gruplama kümesi (depo) şeklindedir.
SELECT
warehouse,
SUM (quantity) qty
FROM
inventory
GROUP BY
warehouse;Hakkında daha fazla bilgi için GROUPING SETS, gruplama kümeleri eğitimine göz atın .
Aşağıda, SQL'in temel sözdizimi gösterilmektedir ROLLUP:
SELECT
c1, c2, aggregate_function(c3)
FROM
table
GROUP BY ROLLUP (c1, c2);
ROLLUP Giriş sütunlar arasında bir hiyerarşi varsayar. Örneğin, giriş sütunu (c1, c2) ise, hiyerarşi c1 > c2. ROLLUPAnlamda bu hiyerarşiyi göz önünde oluşturan tüm gruplama dizileri de üretir. Bu nedenle ROLLUP , raporlama amacıyla alt toplamları ve genel toplamı oluşturmak için sıklıkla kullanırız .
Yukarıdaki sözdiziminde, ROLLUP(c1,c2)aşağıdaki üç gruplama kümesi oluşturur:
(c1,c2) (c1) ()
Bu sözdizimi Oracle, Microsoft SQL Server ve PostgreSQL tarafından desteklenmektedir. Bununla birlikte, MySQL'in aşağıda gösterildiği gibi biraz farklı bir sözdizimi vardır:
SELECT
c1, c2, aggregate_function(c3)
FROM
table_name
GROUP BY c1, c2 WITH ROLLUP;
SQL ROLLUP örnekleri
Gösteri inventoryiçin GROUPING SETSeğitimde kurduğumuz tabloyu kullanacağız .

Tek sütun örneği ile SQL ROLLUP
Aşağıdaki ifade, depoya göre toplam envanteri bulmak için GROUP BYcümleciği ve SUM()işlevi kullanır :
SELECT
warehouse, SUM(quantity)
FROM
inventory
GROUP BY warehouse;

Tüm depolarda toplam ürünlerini almak için eklemek ROLLUP için GROUP BYaşağıdaki gibi fıkra:
SELECT
warehouse, SUM(quantity)
FROM
inventory
GROUP BY ROLLUP (warehouse);

Sonuçta görebileceğiniz gibi, warehousesütundaki NULL değeri genel toplam süper toplama satırını belirtir. Bu örnekte, ROLLUPseçenek, sorgunun tüm ambarlardaki toplam ürünleri gösteren başka bir satır oluşturmasına neden olur.
Çıkışı daha okunaklı hale getirmek için COALESCE(), NULL değerini All warehousesaşağıdaki gibi değiştirmek için işlevi kullanabilirsiniz :
SELECT
COALESCE(warehouse, 'All warehouses') AS warehouse,
SUM(quantity)
FROM
inventory
GROUP BY ROLLUP (warehouse);

Birden çok sütun örneği ile SQL ROLLUP
Aşağıdaki ifade, envanteri depo ve ürüne göre hesaplar:
SELECT
warehouse, product, SUM(quantity)
FROM
inventory
GROUP BY warehouse, product;

En ekleyelim ROLLUPiçin GROUP BYfıkra:
SELECT
warehouse, product, SUM(quantity)
FROM
inventory
GROUP BY ROLLUP (warehouse , product);

Çıktının yalnızca bir değil, iki analiz düzeyindeki özet bilgilerden oluştuğunu unutmayın:
- Belirli bir ambar için her ürün satırı kümesinin ardından, toplam envanteri görüntüleyen ek bir özet satırı görünür. Bu satırlarda,
productsütundaki değerler NULL olarak ayarlanmıştır. - Tüm satırların ardından, tüm depoların ve ürünlerin toplam envanterini gösteren ekstra bir özet satırı görünür. Bu satırlarda,
warehouseveproductsütunlarındaki değerler NULL olarak ayarlanır.
Kısmi toplama örneği ile SQL ROLLUP
ROLLUPAşağıdaki örnekte gösterildiği gibi hesaplanan alt toplamların sayısını azaltan kısmi bir toplama gerçekleştirmek için kullanabilirsiniz :
SELECT
warehouse, product, SUM(quantity)
FROM
inventory
GROUP BY warehouse, ROLLUP (product);

Bu örnekte, sütun ROLLUPiçin productdeğil, yalnızca sütun için bir akşam yemeği toplu özetini yapar warehouse.
Bu eğitimde, ROLLUPtek bir sorgu ile birden çok analiz düzeyi gerçekleştirmek için SQL'i nasıl kullanacağınızı öğrendiniz .
Hiç yorum yok