sql-rollup/
SOURCE:
https://www.sqltutorial.org/sql-rollup/
Özet : Bu eğitimde, ROLLUP
birden fazla gruplama kümesi oluşturmak için SQL'i nasıl kullanacağınızı öğreneceksiniz .
SQL ROLLUP'a Giriş
ROLLUP
Bir uzantısıdır GROUP BY
madde. 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
. ROLLUP
Anlamda 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 inventory
için GROUPING SETS
eğ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 BY
cü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 BY
aşağıdaki gibi fıkra:
SELECT
warehouse, SUM(quantity)
FROM
inventory
GROUP BY ROLLUP (warehouse);
Sonuçta görebileceğiniz gibi, warehouse
sütundaki NULL değeri genel toplam süper toplama satırını belirtir. Bu örnekte, ROLLUP
seç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 warehouses
aş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 ROLLUP
için GROUP BY
fı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,
product
sü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,
warehouse
veproduct
sütunlarındaki değerler NULL olarak ayarlanır.
Kısmi toplama örneği ile SQL ROLLUP
ROLLUP
Aş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 ROLLUP
için product
değil, yalnızca sütun için bir akşam yemeği toplu özetini yapar warehouse
.
Bu eğitimde, ROLLUP
tek bir sorgu ile birden çok analiz düzeyi gerçekleştirmek için SQL'i nasıl kullanacağınızı öğrendiniz .
Hiç yorum yok