İlişkisel veritabanlarının gücünün çoğu, verileri filtrelemekten ve tabloları birleştirmekten gelir. Bu yüzden ilk etapta bu ilişkileri temsil ediyoruz. Ancak modern veritabanı sistemleri başka bir değerli teknik sağlar: gruplama.

Gruplama, bir veritabanından özet bilgileri çıkarmanıza olanak tanır. Yararlı istatistiksel veriler oluşturmak için sonuçları birleştirmenize olanak tanır. Gruplama, sizi şekil listelerinin ortalamasını alma gibi yaygın durumlar için kod yazmaktan kurtarır. Ve daha verimli sistemler oluşturabilir.

GROUP BY Clause Ne Yapar?

GROUP BY, adından da anlaşılacağı gibi, sonuçları daha küçük bir sette gruplandırır. Sonuçlar, gruplanmış sütunun her farklı değeri için bir satırdan oluşur. Bazı ortak değerleri paylaşan satırlara sahip bazı örnek verilere bakarak kullanımını gösterebiliriz.

Aşağıdaki, kayıt albümlerini temsil eden iki tablonun bulunduğu çok basit bir veritabanıdır. Böyle bir veri tabanını şu şekilde kurabilirsiniz: temel bir şema yazmak seçtiğiniz veritabanı sistemi için.

instagram viewer
albümler tablonun birincil anahtarı olan dokuz satırı vardır İD ad, sanatçı, yayın yılı ve satış için sütun ve sütunlar:

++++++
| id | isim | artist_id | release_year | satış |
++++++
| 1 | Abbey Yolu | 1 | 1969 | 14 |
| 2 | Ayın Karanlık Yüzü | 2 | 1973 | 24 |
| 3 | Söylentiler | 3 | 1977 | 28 |
| 4 | Boşver | 4 | 1991 | 17 |
| 5 | Hayvanlar | 2 | 1977 | 6 |
| 6 | Hoşçakal Sarı Tuğlalı Yol | 5 | 1973 | 8 |
| 7 | 21 | 6 | 2011 | 25 |
| 8 | 25 | 6 | 2015 | 22 |
| 9 | Cehennemden Çıkan Yarasa | 7 | 1977 | 28 |
++++++

sanatçılar tablo daha da basit. Kimlik ve ad sütunları olan yedi satırı vardır:

+++
| id | isim |
+++
| 1 | The Beatles |
| 2 | Pink Floyd |
| 3 | Fleetwood Mac |
| 4 | Nirvana |
| 5 | Elton John |
| 6 | Adele |
| 7 | Köfte |
+++

Bunun gibi basit bir veri kümesiyle GROUP BY'ın çeşitli yönlerini anlayabilirsiniz. Elbette, gerçek hayattaki bir veri setinde çok, çok daha fazla satır bulunur, ancak ilkeler aynı kalır.

Tek Sütuna Göre Gruplama

Her sanatçı için kaç albümümüz olduğunu öğrenmek istediğimizi varsayalım. Tipik bir SEÇ artist_id sütununu getirmek için sorgu:

Albümlerden artist_id seçin

Bu, beklendiği gibi dokuz satırın tümünü döndürür:

++
| artist_id |
++
| 1 |
| 2 |
| 3 |
| 4 |
| 2 |
| 5 |
| 6 |
| 6 |
| 7 |
++

Bu sonuçları sanatçıya göre gruplamak için kelime öbeğini ekleyin GROUP BY artist_id:

Albümlerden GROUP BY artist_id öğesini SEÇİN artist_id

Bu, aşağıdaki sonuçları verir:

++
| artist_id |
++
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
++

Sonuç kümesinde yedi satır vardır ve toplam dokuzdan düşürülmüştür. albümler tablo. Her benzersiz artist_id tek sıraya sahiptir. Son olarak, gerçek sayıları elde etmek için şunu ekleyin: MİKTAR(*) seçilen sütunlara:

Artist_id SELECT, COUNT (*)
FROM albümleri
GROUP BY artist_id
+++
| artist_id | COUNT (*) |
+++
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 2 |
| 7 | 1 |
+++

Sonuçlar, kimlikleri olan sanatçılar için iki çift satırı gruplandırır 2 ve 6. Veritabanımızda her birinin iki albümü vardır.

İlişkili: Yeni Başlayanlar İçin Temel SQL Komutları Hile Sayfası

Bir Toplama İşlevi ile Gruplanmış Verilere Nasıl Erişilir

Kullanmış olabilirsiniz MİKTAR daha önce, özellikle de MİKTAR(*) yukarıda görüldüğü gibi formu. Bir kümedeki sonuçların sayısını getirir. Bir tablodaki toplam kayıt sayısını elde etmek için kullanabilirsiniz:

Albümlerden COUNT (*) SEÇİN
++
| COUNT (*) |
++
| 9 |
++

COUNT, toplu bir işlevdir. Bu terim, değerleri birden çok satırdan tek bir değere çeviren işlevleri ifade eder. Genellikle GROUP BY ifadesiyle birlikte kullanılırlar.

Yalnızca satır sayısını saymak yerine, gruplanmış değerlere bir toplama işlevi uygulayabiliriz:

Artist_id SELECT, SUM (satış)
FROM albümleri
GROUP BY artist_id
+++
| artist_id | SUM (satış) |
+++
| 1 | 14 |
| 2 | 30 |
| 3 | 28 |
| 4 | 17 |
| 5 | 8 |
| 6 | 47 |
| 7 | 28 |
+++

Yukarıda 2. ve 6. sanatçılar için gösterilen toplam satışlar, bu sanatçıların birden çok albüm satışlarının toplamıdır:

Sanatçı_kimliği SEÇİN, satış
FROM albümleri
Artist_id IN (2; 6)
+++
| artist_id | satış |
+++
| 2 | 24 |
| 2 | 6 |
| 6 | 25 |
| 6 | 22 |
+++

Birden Çok Sütuna Göre Gruplama

Birden fazla sütuna göre gruplayabilirsiniz. Virgülle ayrılmış birden çok sütun veya ifade eklemeniz yeterlidir. Sonuçlar, bu sütunların kombinasyonuna göre gruplandırılacaktır.

SELECT release_year, sales, count (*)
FROM albümleri
GROUP BY release_year, satış

Bu, genellikle tek bir sütuna göre gruplamadan daha fazla sonuç üretir:

++++
| release_year | satış | sayım (*) |
++++
| 1969 | 14 | 1 |
| 1973 | 24 | 1 |
| 1977 | 28 | 2 |
| 1991 | 17 | 1 |
| 1977 | 6 | 1 |
| 1973 | 8 | 1 |
| 2011 | 25 | 1 |
| 2015 | 22 | 1 |
++++

Küçük örneğimizde, sadece iki albümün aynı çıkış yılına ve satış sayısına (1977'de 28) sahip olduğunu unutmayın.

Yararlı Toplama İşlevleri

COUNT dışında, birkaç işlev GROUP ile iyi çalışır. Her işlev, her sonuç grubuna ait kayıtları temel alan bir değer döndürür.

  • COUNT (), eşleşen kayıtların toplam sayısını döndürür.
  • TOPLA (), verilen sütundaki toplanan tüm değerlerin toplamını döndürür.
  • MIN (), belirli bir sütundaki en küçük değeri döndürür.
  • MAX (), belirli bir sütundaki en büyük değeri döndürür.
  • AVG () ortalama ortalamayı döndürür. SUM () / COUNT () ile eşdeğerdir.

Bu işlevleri bir GROUP cümlesi olmadan da kullanabilirsiniz:

Albümlerden AVG'yi (satış) SEÇİN
++
| AVG (satış) |
++
| 19.1111 |
++

GROUP BY'ı WHERE Cümlesi ile Kullanma

Normal SEÇİM'de olduğu gibi, sonuç kümesini filtrelemek için yine de WHERE kullanabilirsiniz:

Artist_id SELECT, COUNT (*)
FROM albümleri
NEREDE release_year> 1990
GROUP BY artist_id
+++
| artist_id | COUNT (*) |
+++
| 4 | 1 |
| 6 | 2 |
+++

Artık sadece 1990'dan sonra çıkan, sanatçıya göre gruplanmış albümlere sahipsiniz. GROUP BY'dan bağımsız olarak WHERE yan tümcesi ile bir birleşim de kullanabilirsiniz:

R.name, COUNT (*) AS albümlerini SEÇ
FROM albümler l, sanatçılar r
WHERE artist_id = r.id
VE release_year> 1990
GROUP BY artist_id
+++
| isim | albümler |
+++
| Nirvana | 1 |
| Adele | 2 |
+++

Bununla birlikte, birleştirilmiş bir sütuna göre filtreleme yapmaya çalışırsanız:

R.name, COUNT (*) AS albümlerini SEÇ
FROM albümler l, sanatçılar r
WHERE artist_id = r.id
AND albümleri> 2
GROUP BY artist_id;

Bir hata alırsınız:

HATA 1054 (42S22): 'where cümlesinde' bilinmeyen 'albümler' sütun

Toplu verilere dayalı sütunlar, WHERE yan tümcesinde kullanılamaz.

HAVING Maddesinin Kullanılması

Peki, bir gruplama gerçekleştikten sonra sonuç kümesini nasıl filtreleyebilirsiniz? SAHİP fıkra bu ihtiyaçla ilgilenir:

R.name, COUNT (*) AS albümlerini SEÇ
FROM albümler l, sanatçılar r
WHERE artist_id = r.id
GROUP BY artist_id
1'den fazla albüm VAR;

HAVING yan tümcesinin GROUP BY'dan sonra geldiğine dikkat edin. Aksi takdirde, temelde WHERE'nin HAVING ile değiştirilmesidir. Sonuçlar:

+++
| isim | albümler |
+++
| Pink Floyd | 2 |
| Adele | 2 |
+++

Gruplamadan önce sonuçları filtrelemek için yine de bir WHERE koşulu kullanabilirsiniz. Gruplamadan sonra filtreleme için HAVING cümlesiyle birlikte çalışacaktır:

R.name, COUNT (*) AS albümlerini SEÇ
FROM albümler l, sanatçılar r
WHERE artist_id = r.id
VE release_year> 1990
GROUP BY artist_id
1'den fazla albüm VAR;

Veritabanımızdaki sadece bir sanatçı 1990'dan sonra birden fazla albüm yayınladı:

+++
| isim | albümler |
+++
| Adele | 2 |
+++

Sonuçları GROUP BY ile Birleştirme

GROUP BY deyimi, SQL dilinin inanılmaz derecede yararlı bir parçasıdır. Örneğin, bir içindekiler sayfası için verilerin özet bilgilerini sağlayabilir. Büyük miktarda veriyi almak için mükemmel bir alternatiftir. Veritabanı bu ekstra iş yükünü iyi yönetir çünkü tasarımı iş için en uygun hale getirir.

Gruplamayı ve birden çok tabloyu nasıl birleştireceğinizi anladıktan sonra, ilişkisel bir veritabanının gücünün çoğundan yararlanabileceksiniz.

E-posta adresi
SQL Birleştirmeleriyle Aynı Anda Birden Çok Veritabanı Tablosu Nasıl Sorgulanır

Sorguları kolaylaştırmak, zaman kazanmak ve kendinizi bir SQL uzman kullanıcısı gibi hissettirmek için SQL birleştirmelerini nasıl kullanacağınızı öğrenin.

İlgili konular
  • Programlama
  • SQL
Yazar hakkında
Bobby Jack (28 Makale Yayınlandı)

Bobby, yirmi yılın büyük bir bölümünde yazılım geliştirici olarak çalışan bir teknoloji meraklısıdır. Switch Player Magazine'de İnceleme Editörü olarak çalışarak oyun oynama konusunda tutkulu ve çevrimiçi yayıncılık ve web geliştirmenin tüm yönlerine dalmış durumda.

Bobby Jack'dan Daha Fazla

Haber bültenimize abone ol

Teknoloji ipuçları, incelemeler, ücretsiz e-kitaplar ve özel fırsatlar için haber bültenimize katılın!

Bir adım daha…!

Lütfen size az önce gönderdiğimiz e-postadaki e-posta adresinizi onaylayın.

.