3.1 GROUP BY deyimi
SQL dili çok güçlüdür. Basit veri alımına ek olarak, sorgu zamanında verileri gruplandırmanıza olanak tanır. Örneğin elimizde her markanın kaç çeşit ürünü olduğunu öğrenmek istiyoruz, bunu nasıl yapabiliriz?
Bunun için özel bir operatör var GROUP BY
, işte böyle yazılıyor.
GROUP BY column
SQL'den her marka için ürün tipi sayısını göstermesini isteyen bir sorgu yazalım. Böyle bir istek şuna benzer:
SELECT brand, COUNT(*)
FROM product
GROUP BY brand
Aşağıdaki sorgu sonucunu alacaksınız:
marka | saymak(*) |
---|---|
(HÜKÜMSÜZ) | 2 |
bosch | 4 |
IKEA | 6 |
LG | 2 |
akıllı çiçek | 1 |
Ne tür bir istek yazdığımızı ve nasıl bir sonuç aldığımızı dikkatlice inceleyelim. Sonuç olarak, iki sütun görüyoruz. Mantıklı olan bir marka listesiyle ilk. "marka --> miktar" çiftleri gibi bir şey elde etmek istedik .
Lütfen marka isimleri arasında bir kelime olduğunu unutmayın NULL
. Gerçekten de yazdığı markada ürünlerimiz var NULL
ve onları burada görüyoruz. Biraz beklenmedik ama yararlı. Ne kadar çok markasız ürün olduğunu görebiliriz.
Şimdi talebe daha yakından bakalım. Her markanın ürün sayısını bilmek istedik, bu yüzden yazdık GROUP BY brand
ve içine marka ve ifadeyi SELECT
yazdık .COUNT(*)
COUNT(*)
bir grup satır üzerinde gerçekleştirilen bir toplama işlevidir. Bizim durumumuzda, sadece sayılarını sayar. Bu tür pek çok işlev var ve onlara biraz sonra bakacağız.
3.2 GROUP BY ile karmaşık sorgular
Şimdi fiyatı 10'dan küçük olan ürünleri önce elediğimiz ve sonra gruplandırdığımız bir sorgu yazalım. Böyle bir istek şuna benzer:
SELECT brand, COUNT(*)
FROM product
WHERE price > 10
GROUP BY brand
Aşağıdaki sorgu sonucunu alacaksınız:
marka | saymak(*) |
---|---|
bosch | 4 |
IKEA | 5 |
LG | 2 |
akıllı çiçek | 1 |
Tüm NULL ürünler çok ucuz olduğu için sonuç tablomuzdan kayboldu ve IKEA ürün sayısı 1 azaldı. 6'dan 5'e.
Bu, önce filtrelemek için istenen satırları uygulamanızı WHERE
ve ancak daha sonra gruplandırmayı sonuca uygulamanızı önerir.
3.3 Sonucun sütun adları
Bu arada, ortaya çıkan sütunlara ad verebilirsiniz. Sunucunun adı nasıl önerdiğini gördünüz mü count(*)
? Toplam ile değiştirelim. Böyle bir istek şuna benzer:
SELECT brand, COUNT(*) AS total
FROM product
WHERE price > 10
GROUP BY brand
Aşağıdaki sorgu sonucunu alacaksınız:
marka | Toplam |
---|---|
bosch | 4 |
IKEA | 5 |
LG | 2 |
akıllı çiçek | 1 |
Mevcut sütunları da yeniden adlandırabilirsiniz. Daha önce kullanılan sorgulardan birini alıp sütunlara yeni isimler ekleyelim.
SELECT
id AS product_id,
name AS product_name,
price
FROM product
WHERE price < 20 AND brand IS NOT NULL
Aşağıdaki sorgu sonucunu alacaksınız:
ürün kimliği | Ürün adı | fiyat |
---|---|---|
2 | Sandalye | 5.00 |
8 | Lamba | 15.00 |