0Pricing
SQL Interview Prep · Ders

Grupları Sayma ve Filtreleme

Bir eşiği karşılayan grupları, yani klasik 'N'den fazla siparişi olan müşteriler' sorusunu bulmayı öğrenin.

Grupları Sayma ve Filtreleme, 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.

En Yaygın Gruplama Sorusu

'N siparişten fazlasını veren müşterileri bulun' klasik GROUP BY mülakat problemidir. Varyasyonları sürekli karşınıza çıkar: X kereden fazla satılan ürünler, en az Y çalışanı olan departmanlar, Z'den fazla giriş yapılan günler.

Bunların hepsi aynı kalıptır: gruplandırın, sayın, ardından grupları HAVING ile filtreleyin.

Birinci Adım: Grup Başına Sayın

Her grup içindeki satırları sayarak başlayın. 'Müşteri' veya 'ürün'ü tanımlayan anahtara göre gruplandırın, ardından COUNT(*) uygulayın.

Bu işlem, boyutuyla birlikte her grup için bir satır verir. Henüz filtreleme yapmadınız; yalnızca her grubu ölçtünüz.

SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id;

İkinci Adım: HAVING ile Filtreleyin

Şimdi yalnızca eşiği karşılayan grupları tutun. Koşul bir toplulaştırmaya bağlı olduğundan WHERE içinde değil, HAVING içinde yer almalıdır.

Bunu şöyle okuyun: 'Siparişleri müşteriye göre gruplandır, ardından sayısı beşi aşan müşterileri tut.' Bu, klasik sorunun eksiksiz yanıtıdır.

SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;

Farklı Sayısı ile Tümünü Sayma Arasındaki Fark

Kullanılan ifadeye dikkat edin. '3'ten fazla farklı ürün sipariş eden müşteriler' için COUNT(DISTINCT product_id) gerekir; COUNT(*) değil.

  • COUNT(*), gruptaki satırları sayar.
  • COUNT(DISTINCT col), NULL olmayan benzersiz değerleri sayar.

Mülakat yapanlar DISTINCT kullanıp kullanmayacağınızı sınamak için soruya 'farklı' veya 'benzersiz' kelimesini ekler.

SELECT customer_id, COUNT(DISTINCT product_id) AS distinct_products
FROM orders
GROUP BY customer_id
HAVING COUNT(DISTINCT product_id) > 3;

COUNT Yerine SUM ile Filtreleme

Aynı yapı toplamları da ele alır. 'Toplamda 1000'den fazla harcama yapan müşteriler', müşteriye göre gruplandırılır ve SUM(amount) ile filtrelenir.

Herhangi bir toplulaştırma HAVING koşulunu belirleyebilir: COUNT, SUM, AVG, MAX, MIN. Soruda ölçülen değeri fark etmek, hangi toplulaştırmaya göre filtreleme yapacağınızı gösterir.

SELECT customer_id, SUM(amount) AS total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 1000;

Birden Çok Grup Koşulu

HAVING, farklı toplulaştırmalar da dâhil olmak üzere koşulları AND/OR ile birleştirebilir. '5'ten fazla siparişi olan VE ortalama sipariş tutarı 100'ün üzerinde olan müşteriler' tek bir HAVING yan tümcesidir.

Her koşul kendi toplulaştırmasına başvurur; tümü gruplamadan sonra değerlendirilir. Bu, bileşik iş kurallarını düzenli biçimde ifade edebildiğinizi gösterir.

SELECT customer_id,
       COUNT(*) AS orders,
       AVG(amount) AS avg_order
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5 AND AVG(amount) > 100;

WHERE ve HAVING'i Birleştirme

Çoğu zaman sayım yapmadan önce satırları filtrelemeniz gerekir. 'Bu yıla ait siparişler arasından 5'ten fazla siparişi olan müşteriler' tarih için WHERE'i, sayım için HAVING'i kullanır.

WHERE önce satırları azaltır, ardından gruplama ve HAVING eşiği uygulanır. Her iki yan tümceyi tek bir sorguda doğru kullanmak, orta düzey yetkinliğin göstergesidir.

SELECT customer_id, COUNT(*) AS orders_this_year
FROM orders
WHERE order_date >= '2024-01-01'
GROUP BY customer_id
HAVING COUNT(*) > 5;

Yinelenenleri Bulma

Yakın bir örnek de 'yinelenen e-posta adreslerini bulun' sorusudur. Benzersiz olması gereken sütuna göre gruplandırın ve sayısı birden fazla olan grupları tutun.

Bu tek kalıp, yinelenen anahtarları, tekrarlanan işlemleri veya olması gerekenden fazla görünen herhangi bir değeri saptar. Mülakat yapanlar, gruplamayı bir tekilleştirme aracı olarak görüp görmediğinizi sınamak için bunu sorar.

SELECT email, COUNT(*) AS times_seen
FROM users
GROUP BY email
HAVING COUNT(*) > 1;

Tam Sayıya Uyan Gruplar

Eşikler her zaman “büyüktür” anlamına gelmez. “Tam olarak bir siparişi olan müşteriler” için HAVING COUNT(*) = 1; “en az 3” için >= 3 kullanılır.

Sorudaki sınır belirten sözcüğe dikkat edin: “daha fazla”, “en az”, “tam olarak”, “daha az”. Bunların her biri farklı bir karşılaştırma operatörüne karşılık gelir ve mülakat yapanlar bu hassasiyeti sınar.

-- One-time customers
SELECT customer_id, COUNT(*) AS orders
FROM orders
GROUP BY customer_id
HAVING COUNT(*) = 1;

Yalnızca Anahtarları Döndürme

Bazen soru sayıları değil, yalnızca koşulu sağlayan tanımlayıcıları ister; çoğu zaman bunlar başka bir sorguya girdi olarak verilir. Yine gruplandırır ve filtrelersiniz, ancak SELECT ile yalnızca anahtarı seçersiniz.

Ardından bu sorguyu bir IN alt sorgusuna sarabilir veya bu müşterilerin tüm kayıtlarını çekmek için bir birleştirme kullanabilirsiniz. Bu bileşimi bilmek, ileri düzey bir anlayış göstergesidir.

SELECT customer_id
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;

Mülakat Rehberi

“Eşiği karşılayan gruplar” sorularının tümünde dört adımı yüksek sesle açıklayın: (1) gruplandırma anahtarını belirleyin, (2) toplulaştırma ölçüsünü seçin, (3) ifadeden karşılaştırma operatörüne karar verin, (4) satır filtrelerini WHERE içine, toplulaştırma filtresini HAVING içine yerleştirin.

Bu şablon, sayma ve filtreleme sorunlarının tamamını çözer.

Hızlı Kontrol

Soru için doğru sorguyu seçin.

Özet

Kalıp: anahtara göre gruplayın, toplulaştırın, grupları HAVING ile filtreleyin. Bu; “N’den fazla sipariş”, “en çok harcayanlar”, yinelenen kayıtlar ve yalnızca bir kez alışveriş yapan müşteriler sorunlarını çözer.

  • Satırlar için COUNT(*), benzersiz değerler için COUNT(DISTINCT col) kullanın.
  • Karşılaştırma operatörünü sorudaki ifadeyle eşleştirin.
  • Satır filtrelerini WHERE içine, toplulaştırma filtrelerini HAVING içine yazın.
  • Bir IN alt sorgusuna veya birleştirmeye girdi sağlamak için yalnızca anahtarı SELECT edin.

Sıkça Sorulan Sorular

“Grupları Sayma ve Filtreleme” dersi ücretsiz mi?

Evet — “Grupları Sayma ve Filtreleme” 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.

“Grupları Sayma ve Filtreleme” dersinde ne öğreneceğim?

Bir eşiği karşılayan grupları, yani klasik 'N'den fazla siparişi olan müşteriler' sorusunu bulmayı öğ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.

“Grupları Sayma ve Filtreleme” 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

  1. SELECT Sütunları için GROUP BY Kuralı
  2. HAVING ve WHERE Karşılaştırması
  3. Birden Çok Sütun ve İfadeye Göre Gruplama
  4. Grupları Sayma ve Filtreleme
← SQL Interview Prep Sayfasına Dön