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 NULLve 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 brandve içine marka ve ifadeyi SELECTyazdı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ı WHEREve 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