Grup işlevlerini kullanma

Grup işlevlerini kullanarak toplu verileri raporlama

SQL, tam olarak bu tür bilgileri üretmek için sorgular yazmak için kullanılabilen önceden tanımlanmış çok sayıda toplama işlevine sahiptir. GROUP BY yan tümcesi, HAVING yan tümcesi, ait olmayan satırları filtrelerken, bilgileri toplarken bir veri tablosundaki satırların nasıl gruplandırılacağını belirtir. belirtilen gruplar.

Toplama işlevleri, bir tablodaki tüm satırları saymak, bir sütunun verilerinin ortalamasını almak ve sayısal verileri toplamak gibi çeşitli eylemler gerçekleştirir. Toplamalar ayrıca bir sütundaki en yüksek "MAX" veya en düşük "MIN" değerlerini bulmak için bir tabloda arama yapabilir. Diğer sorgu türlerinde olduğu gibi, bu işlevlerin WHERE yan tümcesi ile etki ettiği satırları sınırlayabilir veya filtreleyebilirsiniz. Örneğin, bir yöneticinin bir kuruluşta kaç çalışanın çalıştığını bilmesi gerekiyorsa, bu bilgiyi üretmek için COUNT (*) adlı toplama işlevi kullanılabilir. Aşağıdaki SELECT ifadesinde gösterilen COUNT (*) işlevi, bir kuruluştaki tüm satırları sayar. tablo.

SELECT COUNT(*)
FROM employees;

  COUNT(*)
----------
        24

COUNT (*) işlevi için sonuç tablosu, skaler sonuç veya değer olarak bilinen tek bir satırdan tek bir sütundur. Sonuç tablosunun, SELECT yan tümcesinde belirtilen toplama işlevinin adına karşılık gelen bir sütun başlığına sahip olduğuna dikkat edin.

Yaygın olarak kullanılan toplama işlevlerinden bazıları aşağıdaki gibidir -

SUM( [ALL | DISTINCT] expression )

AVG( [ALL | DISTINCT] expression )

COUNT( [ALL | DISTINCT] expression )

COUNT(*)

MAX(expression)

MIN(expression)

ALL ve DISTINCT anahtar sözcükleri isteğe bağlıdır ve yazmayı öğrendiğiniz SELECT yan tümceleriyle yaptıkları gibi çalışır. ALL anahtar sözcüğü, seçeneğin izin verildiği varsayılandır. Sözdiziminde listelenen ifade bir sabit, bir işlev olabilir, veya aritmetik işleçlerle birbirine bağlanan sütun adları, sabitler ve işlevlerin herhangi bir kombinasyonu. Ancak, toplama işlevleri çoğunlukla bir sütun adıyla kullanılır. COUNT işlevi dışında, tüm toplama işlevleri NULL değerleri dikkate almaz.

Toplamaları kullanırken anlamanız ve uymanız gereken iki kural vardır:

  • Toplama işlevleri hem SELECT hem de HAVING yan tümcelerinde kullanılabilir (HAVING yan tümcesi bu bölümün ilerleyen kısımlarında ele alınacaktır).

  • Toplama işlevleri bir WHERE yan tümcesinde kullanılamaz. İhlali Oracle ORA-00934 grup işlevine burada izin verilmiyor hata mesajına neden olur.

Çizimler

Aşağıdaki SELECT sorgusu, kuruluştaki çalışanların sayısını sayar.

SELECT COUNT(*) Count
FROM employees;

COUNT
-----
   24

Aşağıdaki SELECT sorgusu, kuruluştaki çalışanların maaşlarının ortalamasını döndürür.

SELECT AVG(Salary) average_sal
FROM employees;

AVERAGE_SAL
-----------
      15694

Aşağıdaki SELECT sorgusu, kuruluştaki çalışanların maaşlarının toplamını döndürür.

SELECT SUM(Salary) total_sal
FROM employees;

TOTAL_SAL
---------
    87472

Aşağıdaki SEÇME sorgusu kuruluştaki çalışanların en eski ve en son işe alındığı tarihleri ​​döndürür.

SELECT MIN (hire_date) oldest, MAX (hire_date) latest
FROM employees;

OLDEST		LATEST
---------	-----------
16-JAN-83	01-JUL-2012

GRUPLAMA

Toplama işlevleri normalde GROUP BY deyimiyle birlikte kullanılır. GROUP BY cümlesi, aşağıdakiler gibi daha karmaşık yönetim sorularını yanıtlamak için toplama işlevlerini kullanmanıza olanak tanır:

Her departmandaki çalışanların ortalama maaşı nedir?

Her departmanda kaç kişi çalışıyor?

Belirli bir proje üzerinde kaç kişi çalışıyor?

İşleve göre grupla, sütunlara göre veri grupları oluşturur ve bilgileri yalnızca bir grup içinde toplar. Gruplama kriteri, GROUP BY yan tümcesinde belirtilen sütunlarla tanımlanır. Bu hiyerarşiyi takiben, veriler önce gruplar halinde düzenlenir ve ardından WHERE yan tümcesi her gruptaki satırları kısıtlar.

GROUP BY maddesini kullanma yönergeleri

(1) GROUP BY işlevinde kullanılan tüm bağımlı sütunlar veya sütunlar, gruplamanın temelini oluşturmalı, dolayısıyla GROUP BY maddesine de dahil edilmelidir.

SELECT	DEPARTMENT_ID, SUM(SALARY)
FROM employees;

DEPARTMENT_ID,
*
ERROR at line 2:
ORA-00937: not a single-group group function

(2) GROUP BY yan tümcesi sütun diğer adlarının kullanımını desteklemez, ancak gerçek adları destekler.

(3) GROUP BY yan tümcesi yalnızca SUM, AVG, COUNT, MAX ve MIN gibi toplama işlevleriyle kullanılabilir. Tek satırlı işlevlerle kullanılırsa, Oracle "ORA-00979: GROUP BY ifadesi değil" olarak bir istisna atar .

(4) Toplama işlevleri, GROUP BY yan tümcesinde kullanılamaz. Oracle burada "ORA-00934: grup işlevine izin verilmiyor" hata mesajını döndürecektir.

Aşağıdaki sorgu, her departmanda çalışan çalışanların sayısını listeler.

SELECT  DEPARTMENT_ID,  COUNT (*)
FROM employees
GROUP BY DEPARTMENT_ID;

Benzer şekilde, her departmandaki ilgili iş kimlikleri için maaşların toplamını bulmak için aşağıdaki sorgu. Grubun Departman ve İş kimliğine göre oluşturulduğunu unutmayın. Dolayısıyla GROUP BY yan tümcesinde görünürler.

SELECT DEPARTMENT_ID, JOB_ID, SUM (SAL)
FROM employees
GROUP BY DEPARTMENT_ID, JOB_ID;

Aşağıdaki sorgu da aynı sonucu verir. Lütfen gruplamanın departman kimliği ve iş kimliği sütunlarına dayandığını, ancak görüntüleme amacıyla kullanılmadığını unutmayın.

SELECT SUM (SALARY)
FROM employees
GROUP BY DEPARTMENT_ID, JOB_ID;

DISTINCT, TÜM anahtar kelimelerin Toplama işlevleriyle kullanılması

Giriş parametresiyle DISTINCT anahtar sözcüğünü belirterek, işleve göre grupla, yalnızca toplama için sütunun benzersiz değerini dikkate alır. Giriş parametresiyle ALL anahtar sözcüğünü belirterek, işleve göre grupla, boş değerler ve kopyalar da dahil olmak üzere toplama için sütunun tüm değerlerini dikkate alır. TÜM varsayılan özelliktir.

HAVING maddesi

HAVING yan tümcesi, sütun adları ve ifadeler için bir WHERE yan tümcesinin kullanıldığı gibi, toplama işlevleri için kullanılır. Esasen, HAVING ve WHERE yan tümceleri aynı şeyi yapar, yani bir koşula dayalı bir sonuç tablosuna dahil edilen satırları filtrele . HAVING yan tümcesi grupları filtreliyor gibi görünse de, bunu yapmaz, bunun yerine HAVING yan tümcesi satırları filtreler.

Bir grubun tüm satırları elendiğinde grup da ortadan kalkar. Özetlemek gerekirse, WHERE ve HAVING yan tümceleri arasındaki önemli farklar şunlardır:

GRUPLAMA eyleminden ÖNCE satırları filtrelemek için bir WHERE yan tümcesi kullanılır (yani, toplama işlevlerinin hesaplanmasından önce).

HAVING yan tümcesi, GRUPLAMA işleminden SONRA satırları filtreler (yani, toplama işlevlerinin hesaplanmasından sonra).

SELECT JOB_ID,	SUM (SALARY)
FROM employees
GROUP BY JOB_ID
HAVING SUM (SALARY) > 10000;

HAVING yan tümcesi, doğrudan GROUP BY yan tümcesi seçeneğiyle ilişkili bir koşullu seçenektir çünkü HAVING yan tümcesi, GROUP BY deyiminin sonucuna göre sonuç tablosundaki satırları ortadan kaldırır.

SELECT department_id, AVG(Salary)
FROM employees
HAVING AVG(Salary) > 33000;
ERROR at line 1:  ORA-00937: not a single-group group function