Menu
Coddy logo textTech

Grouping Part 2

Coddy'nin SQL Journey'sinin Temeller bölümünün bir parçası — ders 37 / 72.

WHERE anahtar kelimesi her kayıtta ayrı ayrı bir koşul çalıştırır. Örneğin:

SELECT * FROM table1
WHERE col1 > col2

col1 > col2 her kayıtta çalıştırılır ve koşulun karşılanıp karşılanmadığı kontrol edilir.

Ama ya toplu sonuçları filtrelemek istersek? Örneğin:

SELECT category, AVG(price) FROM table1
WHERE AVG(price) > 40
GROUP BY category

Bu çalışmayacaktır çünkü WHERE herhangi bir toplama işlemini kontrol edemez. Bunun için HAVING anahtar kelimesi vardır. Veriyi toplama koşuluna göre filtreler.

SELECT category, AVG(price) FROM table1
GROUP BY category
HAVING AVG(price) > 40

Bu, ortalama fiyatı 40'dan büyük olan tüm kategorileri filtreleyecektir.

Eğer HAVING ve WHERE koşullarını birleştirmek istiyorsak şöyle yazacağız:

SELECT category, AVG(price) FROM table1
WHERE price > 25
GROUP BY category
HAVING AVG(price) > 40

Bu önce kayıt kayıt giderek fiyatı 25'ten büyük olan tüm kayıtları filtreleyecek ve ancak ondan sonra GROUP BY yan tümcesini çalıştıracak ve ortalama fiyatı 40'tan büyük olan her kategoriyi filtreleyecek.

challenge icon

Görev

Orta

Mevcut tablolar ve sütunlar:

  • <strong>earthquakes</strong>: <strong>location</strong>, <strong>amplitude</strong>, <strong>period</strong>

Richter ölçeği, depremlerin büyüklüğünü ölçmek için kullanılan logaritmik bir ölçektedir.

Tüm büyük depremlerin her konum için ortalama büyüklüğünü döndürmemiz gerekiyor

Büyük bir deprem şu şekilde tanımlanır:

  • Genlik 1'e eşit veya büyüktür
  • Dalgaların periyodu 1 dakikaya eşit veya büyüktür

Bu meydan okumada farklı bir formül kullanacağız: M = (A/T)<sup>2</sup> / T, bu da M = ((A/T)*(A/T)) / T ile eşdeğerdir.

Yalnızca büyük depremleri dahil ederek her konumun konumunu ve ortalama büyüklüğünü döndürün (sütunu avg_magnitude olarak adlandırın). Sonucunuza yalnızca avg_magnitude'u 1'den büyük olan konumları dahil edin

Sonuçları 2 ondalık basamağa yuvarlayın

Kopya kağıdı

WHERE anahtar kelimesi bireysel kayıtları filtreler, HAVING ise gruplama sonrasında toplu sonuçları filtreler:

SELECT category, AVG(price) FROM table1
GROUP BY category
HAVING AVG(price) > 40

Her iki koşulu birleştirmek için:

SELECT category, AVG(price) FROM table1
WHERE price > 25
GROUP BY category
HAVING AVG(price) > 40

WHERE önce kayıtları filtreler, ardından GROUP BY kalan veriyi gruplar ve son olarak HAVING gruplandırılmış sonuçları filtreler.

Kendin dene

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Temeller bölümündeki tüm dersler