SQL GROUP BY Beyanı Hakkında Bilmeniz Gereken Her Şey

SQL GROUP BY Beyanı Hakkında Bilmeniz Gereken Her Şey

İlişkisel veritabanlarının gücünün çoğu, verileri filtrelemekten ve tabloları bir araya getirmekten gelir. Bu nedenle, 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, ortalama rakam listeleri gibi genel durumlar için kod yazmaktan sizi kurtarır. Ve daha verimli sistemler yapabilir.





GROUP BY Maddesi Ne Yapar?

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





telefon interneti bilgisayarda nasıl kullanılır

Aşağıdaki, kayıt albümlerini temsil eden iki tablodan oluşan çok basit bir veritabanıdır. Böyle bir veritabanı kurabilirsiniz temel şema yazma seçtiğiniz veritabanı sistemi için. NS albümler tablonun birincil anahtarı olan dokuz satırı vardır İD ad, sanatçı, yayın yılı ve satışlar için sütun ve sütunlar:

+----+---------------------------+-----------+--------------+-------+
| id | name | artist_id | release_year | sales |
+----+---------------------------+-----------+--------------+-------+
| 1 | Abbey Road | 1 | 1969 | 14 |
| 2 | The Dark Side of the Moon | 2 | 1973 | 24 |
| 3 | Rumours | 3 | 1977 | 28 |
| 4 | Nevermind | 4 | 1991 | 17 |
| 5 | Animals | 2 | 1977 | 6 |
| 6 | Goodbye Yellow Brick Road | 5 | 1973 | 8 |
| 7 | 21 | 6 | 2011 | 25 |
| 8 | 25 | 6 | 2015 | 22 |
| 9 | Bat Out of Hell | 7 | 1977 | 28 |
+----+---------------------------+-----------+--------------+-------+

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



+----+---------------+
| id | name |
+----+---------------+
| 1 | The Beatles |
| 2 | Pink Floyd |
| 3 | Fleetwood Mac |
| 4 | Nirvana |
| 5 | Elton John |
| 6 | Adele |
| 7 | Meat Loaf |
+----+---------------+

Bunun gibi basit bir veri seti ile GROUP BY'nin çeşitli yönlerini anlayabilirsiniz. Tabii ki, gerçek hayattaki bir veri kümesinde çok daha fazla satır olacaktır, ancak ilkeler aynı kalır.

Tek Sütuna Göre Gruplama

Her sanatçı için kaç tane albümümüz olduğunu öğrenmek istediğimizi varsayalım. Tipik bir ile başlayın SEÇME artist_id sütununu almak için sorgu:





SELECT artist_id FROM albums

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 gruplandırmak için ifadeyi ekleyin sanatçı kimliğine göre grupla :





SELECT artist_id FROM albums GROUP BY artist_id

Hangi aşağıdaki sonuçları verir:

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

Sonuç kümesinde toplam dokuzdan azaltılmış yedi satır vardır. albümler tablo. Her biri benzersiz artist_id tek sıra vardır. Son olarak, gerçek sayıları almak için ekleyin SAYMAK(*) seçilen sütunlara:

SELECT artist_id, COUNT(*)
FROM albums
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ıyor 2 ve 6 . Her birinin veritabanımızda iki albümü var.

İlgili: Yeni Başlayanlar için Temel SQL Komutları Hile Sayfası

Bir Toplama İşleviyle Gruplandırılmış Verilere Nasıl Erişilir

kullanmış olabilirsin SAYMAK daha önce, özellikle de SAYMAK(*) şekil yukarıda görüldüğü gibidir. Bir kümedeki sonuç sayısını getirir. Bir tablodaki toplam kayıt sayısını almak için kullanabilirsiniz:

SELECT COUNT(*) FROM albums
+----------+
| COUNT(*) |
+----------+
| 9 |
+----------+

COUNT bir toplama işlevidir. Bu terim, birden çok satırdaki değerleri tek bir değere çeviren işlevleri ifade eder. Genellikle GROUP BY ifadesi ile birlikte kullanılırlar.

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

SELECT artist_id, SUM(sales)
FROM albums
GROUP BY artist_id
+-----------+------------+
| artist_id | SUM(sales) |
+-----------+------------+
| 1 | 14 |
| 2 | 30 |
| 3 | 28 |
| 4 | 17 |
| 5 | 8 |
| 6 | 47 |
| 7 | 28 |
+-----------+------------+

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

SELECT artist_id, sales
FROM albums
WHERE artist_id IN (2, 6)
+-----------+-------+
| artist_id | sales |
+-----------+-------+
| 2 | 24 |
| 2 | 6 |
| 6 | 25 |
| 6 | 22 |
+-----------+-------+

Birden Çok Sütuna Göre Gruplandırma

Birden fazla sütuna göre gruplandırabilirsiniz. Virgülle ayırarak birden çok sütun veya ifade eklemeniz yeterlidir. Sonuçlar bu sütunların birleşimine göre gruplanacaktır.

SELECT release_year, sales, count(*)
FROM albums
GROUP BY release_year, sales

Bu, genellikle tek bir sütuna göre gruplandırmaktan daha fazla sonuç üretecektir:

+--------------+-------+----------+
| release_year | sales | count(*) |
+--------------+-------+----------+
| 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, yalnızca iki albümün aynı çıkış yılına ve satış sayısına sahip olduğuna dikkat edin (1977'de 28).

Faydalı Toplama Fonksiyonları

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

  • COUNT(), eşleşen kayıtların toplam sayısını döndürür.
  • SUM(), verilen sütundaki eklenen tüm değerlerin toplamını döndürür.
  • MIN(), verilen 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 GROUP yan tümcesi olmadan da kullanabilirsiniz:

google'da varsayılan e-posta nasıl değiştirilir
SELECT AVG(sales) FROM albums
+------------+
| AVG(sales) |
+------------+
| 19.1111 |
+------------+

GROUP BY WHERE Cümlesiyle Kullanma

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

SELECT artist_id, COUNT(*)
FROM albums
WHERE 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 gruplandırılmış albümleriniz var. Ayrıca, GROUP BY'den bağımsız olarak, WHERE yan tümcesiyle bir birleştirme kullanabilirsiniz:

SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
AND release_year > 1990
GROUP BY artist_id
+---------+--------+
| name | albums |
+---------+--------+
| Nirvana | 1 |
| Adele | 2 |
+---------+--------+

Ancak, toplu bir sütuna göre filtrelemeye çalışırsanız:

SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
AND albums > 2
GROUP BY artist_id;

Bir hata alırsınız:

ERROR 1054 (42S22): Unknown column 'albums' in 'where clause'

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

HAVING Cümlesini Kullanmak

Peki, bir gruplama gerçekleştikten sonra sonuç kümesini nasıl filtrelersiniz? NS SAHİP maddesi bu ihtiyaca yöneliktir:

SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
GROUP BY artist_id
HAVING albums > 1;

HAVING yan tümcesinin GROUP BY'den sonra geldiğini unutmayın. Aksi takdirde, esasen WHERE'nin HAVING ile basit bir şekilde değiştirilmesidir. Sonuçlar:

+------------+--------+
| name | albums |
+------------+--------+
| Pink Floyd | 2 |
| Adele | 2 |
+------------+--------+

Gruplamadan önce sonuçları filtrelemek için WHERE koşulunu yine de kullanabilirsiniz. Gruplandırmadan sonra filtreleme için HAVING yan tümcesi ile birlikte çalışacaktır:

SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
AND release_year > 1990
GROUP BY artist_id
HAVING albums > 1;

Veritabanımızda 1990'dan sonra sadece bir sanatçı birden fazla albüm çıkardı:

+-------+--------+
| name | albums |
+-------+--------+
| Adele | 2 |
+-------+--------+

Sonuçları GROUP BY İle Birleştirme

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

Gruplandırmayı ve birden çok tabloya nasıl katılacağınızı anladıktan sonra, ilişkisel bir veritabanının gücünün çoğundan yararlanabileceksiniz.

Paylaş Paylaş Cıvıldamak E-posta SQL Joins ile Aynı Anda Birden Çok Veritabanı Tablosu Nasıl Sorgulanır

Sorguları kolaylaştırmak, zamandan tasarruf etmek ve kendinizi bir SQL uzmanı gibi hissetmenizi sağlamak için SQL birleşimlerini nasıl kullanacağınızı öğrenin.

3d yazıcı ile ne yapılır
Sonrakini Oku İlgili konular
  • Programlama
  • SQL
Yazar hakkında Bobby Jack(58 Makale Yayımlandı)

Bobby, yirmi yılı aşkın bir süredir yazılım geliştiricisi olarak çalışan bir teknoloji tutkunu. Oyun konusunda tutkulu, Switch Player Magazine'de İnceleme Editörü olarak çalışıyor ve çevrimiçi yayıncılık ve web geliştirmenin tüm yönleriyle ilgileniyor.

Bobby Jack'dan Daha Fazla

Haber bültenimize abone ol

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

Abone olmak için buraya tıklayın