GROUP BY Olmadan Toplulaştırma
Yalın bir toplulaştırmanın tüm tabloyu tek satıra nasıl indirdiğini öğrenin.
GROUP BY Olmadan Toplulaştırma, CoddyKit'te ücretsiz bir SQL Interview Prep dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Interview Prep kursu toplamda 4 dersten oluşur.
Bir Toplama İşlevi, Bir Satır
Mülakat yapanlar bu soruyla temel bir fikri sınar: "GROUP BY olmadan bir toplama işlevi kullandığınızda ne olur?"
Yanıt şudur: Tablonun tamamı tek bir satıra indirgenir. Toplama işlevi, uygun satırların tümünü tek bir örtük grup olarak ele alır. Bu "örtük grup" modelini anlamak, sonraki birçok kuralı açıklar; bu yüzden konuyu dikkatle oluşturalım.
Örtük Tek Grup
GROUP BY olmadan yalın bir toplama işlevi yazdığınızda SQL, sanki her satırı içeren tek bir grup varmış gibi davranır. Tabloda kaç satır olduğundan bağımsız olarak sonuç her zaman tam olarak bir satırdır — tablo boş olsa bile.
Örneğin SELECT COUNT(*) FROM employees, tüm tabloyu özetleyen tek sayının bulunduğu bir satır döndürür.
SELECT COUNT(*) AS total_employees
FROM employees;
-- always returns exactly one rowBirlikte Birden Çok Toplama İşlevi
Tek bir SELECT içinde birkaç toplama işlevini listeleyebilirsiniz. Bunların tümü aynı örtük grubu özetlediğinden, yine birden çok sütun içeren tam olarak bir satır elde edersiniz.
Bu, standart "özet istatistikleri ver" sorgusudur. Dört sayının tümü aynı satır kümesini, yani tablonun tamamını açıklar.
SELECT
COUNT(*) AS num_rows,
SUM(salary) AS total_pay,
AVG(salary) AS avg_pay,
MAX(salary) AS top_pay
FROM employees;Karıştırma Hatası
En çok sınanan kural şudur: GROUP BY olmadan aynı SELECT içinde yalın bir toplama işleviyle toplama yapılmamış bir sütunu birlikte kullanamazsınız.
Neden mi? Toplama işlevi tek bir satır üretirken sıradan bir sütunun birden çok değeri vardır — hangisini göstermelidir? Bu belirsiz olduğundan standart SQL bir hata üretir.
-- ERROR: name is not aggregated and there is no GROUP BY
SELECT name, MAX(salary)
FROM employees;Neden Belirsizdir
Tablomuz üzerinden düşünün. MAX(salary) tüm satırları tek bir değere indirger. Ancak name her satırda farklı bir değere sahiptir. Tek özet satırı, tek bir hücrede beş adı barındıramaz.
Veritabanı tahminde bulunmayı reddeder. Bu, GROUP BY kuralının temelindeki ilkenin aynısıdır: Seçilen her sütun ya toplama işleviyle işlenmeli ya da grubun parçası olmalıdır. GROUP BY olmadığında yalnızca toplama işlevlerine izin verilir.
MySQL'in Gevşek İstisnası
Belirtmeye değer bir lehçe ayrıntısı şudur: Eski veya katı olmayan MySQL, karıştırma sorgusuna izin verir ve rastgele bir ad döndürürdü — bu adın en yüksek maaşlı çalışana ait olması gerekmezdi.
ONLY_FULL_GROUP_BY etkin olan modern MySQL (günümüzdeki varsayılan ayar) bu sorguyu diğerleri gibi reddeder. Bundan söz etmek farklı lehçelerin farkında olduğunuzu gösterir; ancak karıştırılmış sorguyu her zaman hatalı kabul edin.
MAX'in Ardındaki Satırı Getirme
Peki en yüksek maaşlı çalışanın adını nasıl elde edersiniz? Karıştırarak değil. ORDER BY + LIMIT kullanın veya toplama işleviyle karşılaştırma yapan bir alt sorgu yazın.
ORDER BY/LIMIT sürümü en basit olanıdır. Alt sorgu sürümü ise kolayca genellenir ve maksimum değer konusunda eşit olan tüm çalışanları döndürür.
-- Subquery: returns everyone earning the max
SELECT name, salary
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);Boş Tablolarda Toplama İşlevleri
Mülakat yapanların araya sıkıştırdığı bir uç durum şudur: "Boş bir tabloda yalın bir toplama işlevi ne döndürür?"
COUNT(*)0 döndürür (tek satır, 0 değeri).SUM,AVG,MIN,MAXNULL döndürür (tek satır, NULL değeri).
Önemli nokta şudur: Yine tek bir satır elde edersiniz, asla sıfır satır değil. Bu tek satır garantisi, GROUP BY olmadan kullanılan toplama işlevinin temel özelliğidir.
SELECT COUNT(*) AS c, SUM(salary) AS s, MAX(salary) AS m
FROM employees
WHERE 1 = 0;
-- one row: c=0, s=NULL, m=NULLWHERE'de Toplama İşlevi Kullanılamaz
Modelden çıkan başka bir kural da şudur: Toplama işlevini WHERE koşuluna koyamazsınız; çünkü WHERE, toplama gerçekleşmeden önce tek tek satırları filtreler.
Bir toplama sonucu üzerinde filtreleme yapmak için HAVING kullanın (gruplamayla birlikte) veya toplama işlevini bir alt sorguya sarın. WHERE, yürütme sıralamasında toplama sonucunu görebilmek için çok erken çalışır.
-- ERROR: aggregate not allowed in WHERE
-- SELECT * FROM employees WHERE salary > AVG(salary);
-- Correct: compare to the aggregate via subquery
SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);Yalın Toplama İşlevi ve GROUP BY
Aradaki farkı şöyle ifade edin:
- GROUP BY yok: tek örtük grup = tablonun tamamı = tam olarak bir sonuç satırı.
- GROUP BY col var: col değerlerinin her farklı değeri için bir grup = grup başına bir satır.
Yalın toplama işlevi, gruplama sütunu sayısı sıfır olan GROUP BY işleminden ibarettir. Aynı mekanizma, tek büyük kova.
-- Whole table: one row
SELECT AVG(salary) FROM employees;
-- Per department: one row each
SELECT department, AVG(salary)
FROM employees
GROUP BY department;Nasıl Açıklanır
Açık ve düzgün bir yanıt şöyledir: "GROUP BY olmadan kullanılan bir toplama işlevi, sonuç kümesinin tamamını tek bir örtük grup olarak ele alır ve tablo boş olsa bile tam olarak bir özet satırı döndürür. Toplama yapılmamış bir sütunu bunun yanında seçemezsiniz; çünkü bu sütunun değeri belirsiz olur. MAX veya MIN'in arkasındaki satırı elde etmek için LIMIT ile birlikte ORDER BY ya da toplama işleviyle karşılaştırma yapan bir alt sorgu kullanırım."
Kısa Kontrol
Sonucun biçimini tahmin edin.
Özet
GROUP BY olmadan toplama işlevleri kısaca:
- Tablonun tamamı tek bir örtük grup olur → tam olarak bir sonuç satırı.
- Yalın bir toplama işlevini toplama yapılmamış bir sütunla birlikte kullanamazsınız.
- Boş tablo:
COUNT(*)= 0, diğerleri NULL döndürür; yine de tek satır elde edilir. - Toplama işlevleri
WHEREiçinde yer alamaz; bir alt sorgu veyaHAVINGkullanın. - MIN/MAX'in arkasındaki satırı elde etmek için ORDER BY + LIMIT veya bir alt sorgu kullanın.
Toplama işlevleriyle ilgili mülakat alıştırmaları tamamlandı.
Sıkça Sorulan Sorular
“GROUP BY Olmadan Toplulaştırma” dersi ücretsiz mi?
Evet — “GROUP BY Olmadan Toplulaştırma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Interview Prep kursu toplamda 4 dersten oluşur.
“GROUP BY Olmadan Toplulaştırma” dersinde ne öğreneceğim?
Yalın bir toplulaştırmanın tüm tabloyu tek satıra nasıl indirdiğini öğrenin. SQL Interview Prep ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
SQL Interview Prep öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL Interview Prep, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“GROUP BY Olmadan Toplulaştırma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu SQL Interview Prep dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL Interview Prep dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- COUNT(*) ile COUNT(sütun) ve COUNT(DISTINCT) Karşılaştırması
- NULL Değerlerle SUM ve AVG
- MIN, MAX ve Sayısal Olmayan Toplulaştırma
- GROUP BY Olmadan Toplulaştırma