4.1 Gruplandırma sütunları
Ayrıca çok önemli olan, kayıtları gruplandırırsanız, bölümde SELECT
yalnızca verilerin gruplandırıldığı sütunları belirtebilmenizdir.
Senyapamamakbir tür sorgusu yazın ve bölümde adSELECT
sütununu belirtin :
SELECT brand, name
FROM product
GROUP BY brand
Ürün tablosunda ad alanına sahip bir dizi satırınız var ve burada hangi satırı değiştirmeniz gerektiği açık değil. Tekrar düşünün: Her markanın ürün sayısını ve ortaya çıkan tablonun ürünün adını nasıl alabileceğini bilmek istiyorsunuz?
operatörünü kullanırsanız GROUP BY
, sonucunuzda normal satırlar olamaz, yalnızca verilerin gruplandırıldığı sütunlar ve "hesaplanan sütunlar", örn.COUNT(*)
4.2 Hesaplanan sütunlara göre gruplama
Ancak birden çok sütuna ve hatta hesaplanan sütunlara göre gruplandırabilirsiniz. Örnek:
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
Ve bu sorgunun sonucu:
kiralama_yılı | Toplam |
---|---|
2012 | 1 |
2013 | 1 |
2014 | 1 |
2015 | 2 |
2018 | 1 |
Talebimizi inceleyelim.
Çalışan tablosunda , her çalışanın benzersiz bir işe alım tarihi vardır, bu nedenle verileri buna göre gruplandırmak işe yaramaz - her tarih için bir kayıt olur ve gruplandırma pek mantıklı olmaz. Ancak işe alım tarihinden işe alım yılına geçersek, o zaman şirketin aynı yıl içinde birkaç çalışanı işe aldığı bir durum olabilir.
Gruplamadan önce bu tablonun nasıl görüneceğine tekrar bakalım:
SELECT
id,
name,
YEAR(join_date) AS hire_year,
join_date
FROM employee
Ve bu sorgunun sonucu:
İD | isim | kiralama_yılı | katılmak_tarihi |
---|---|---|---|
1 | İvanov İvan | 2012 | 2012-06-30 |
2 | Petrov Petr | 2013 | 2013-08-12 |
3 | İvanov Sergey | 2014 | 2014-01-01 |
4 | Rabinovich Moisha | 2015 | 2015-05-12 |
5 | Kirienko Anastasia | 2015 | 2015-10-10 |
6 | Vaska | 2018 | 2018-11-11 |
Ancak ortaya çıkan bu tablo, kiralama_yılına göre gruplandırılabilir ve belirli bir yılda kaç kişinin işe alındığını öğrenebilir.
4.3 Birden çok sütuna göre gruplama
Şimdi her yılın her ayında kaç çalışanı işe aldığımızı bulmaya çalışalım. Bunu yapmak için, sorguya aynı anda bir değil, iki hesaplanmış alan eklememiz gerekir - kiralama yılı (hire_year) ve kiralama ayı (hire_month).
Şöyle bir sorgu yazalım:
SELECT
id,
name,
YEAR(join_date) AS hire_year,
MONTH(join_date) AS hire_month,
join_date
FROM employee
Ve bu sorgunun sonucu:
İD | isim | kiralama_yılı | kiralama_ay | katılmak_tarihi |
---|---|---|---|---|
1 | İvanov İvan | 2012 | 6 | 2012-06-30 |
2 | Petrov Petr | 2013 | 8 | 2013-08-12 |
3 | İvanov Sergey | 2014 | 1 | 2014-01-01 |
4 | Rabinovich Moisha | 2015 | 5 | 2015-05-12 |
5 | Kirienko Anastasia | 2015 | 10 | 2015-10-10 |
6 | Vaska | 2018 | on bir | 2018-11-11 |
Bu sonuç tablosundaki verileri aya göre gruplandırırsak, işe alınan yıldan bağımsız olarak insanları gruplara ayırmış oluruz. Sonuç tablosunda üç sütun olması gerekiyor: yıl, ay ve işe alınan çalışan sayısı.
Bunu yapmak için operatörden sonra GROUP BY
bir değil iki sütunun adını kullanmanız gerekir. Örnek:
SELECT
YEAR(join_date) AS hire_year,
MONTH(join_date) AS hire_month,
COUNT(*) AS total
FROM employee
GROUP BY hire_year, hire_month
Ve bu sorgunun sonucu:
kiralama_yılı | kiralama_ay | Toplam |
---|---|---|
2012 | 6 | 1 |
2013 | 8 | 1 |
2014 | 1 | 1 |
2015 | 5 | 1 |
2015 | 10 | 1 |
2018 | on bir | 1 |
Tabloda çok az kaydımız var, dolayısıyla toplam sütununda her yerde birimler var. Bu arada, ne kadar çok sütunu gruplandırırsak sonuçta o kadar çok satırımız olacağına dikkat edin.
GO TO FULL VERSION