Gruplama ve Having

SQL Server'a Giriş

John MacKintosh

Instructor

Basit bir SELECT

SELECT 
  SUM(demand_loss_mw) AS lost_demand 
FROM grid;
+-------------+
| lost_demand | 
+-------------+
| 177888      |
+-------------+
SQL Server'a Giriş

Gruplama hatası

Bunu ek bir sütun ekleyerek parçalayabilir miyiz?

SELECT 
  SUM(demand_loss_mw) AS lost_demand, 
  description 
FROM grid;
Msg 8120, Level 16, State 1, Line 1
Column 'grid.description' is invalid in the select list because it is not contained in 
either an aggregate function or the GROUP BY clause.
SQL Server'a Giriş
SELECT 
  SUM(demand_loss_mw) AS lost_demand,
  description 
FROM grid 
GROUP BY description;
+----------- -+-------------------------------------------------------+
| lost_demand | description                                           | 
+-------------+-------------------------------------------------------+
| NULL        | Gerçek Fiziksel Saldırı                              |
| NULL        | Soğuk Hava Olayı                                     |
| NULL        | Etki Yaratma Potansiyeli Olan Siber Olay             |
| 40          | Dağıtım Kesintisi                                    |
| 2           | Dağıtım Sistemi Kesintisi                            |
| NULL        | Deprem                                                |
| NULL        | Jeneratörde Elektrik Arızası                          |
| 338         | Elektrik Sistemi Ada Modu                             |
| 24514       | Elektrik Sistemi Ayrışması Ada Modu                   |
| 15          | Elektrik Sistemi Ayrışması Ada Modu Şiddetli Hava     |
+-------------+-------------------------------------------------------+
SQL Server'a Giriş
SELECT 
  SUM(demand_loss_mw) AS lost_demand, 
  description 
FROM grid 
WHERE 
  description LIKE '%storm' 
  AND demand_loss_mw IS NOT NULL 
GROUP BY description;
+----------- -+--------------------------------------------+
| lost_demand | description                                | 
|-------------+--------------------------------------------|
| 996         | Buz Fırtınası                              |
| 420         | Yük Kesme Şiddetli Hava   Yıldırım Fırtınası |
| 332         | Büyük Fırtına                              |
| 3           | Şiddetli Hava  Gök Gürültülü Fırtına       |
| 413         | Şiddetli Hava  Rüzgâr Fırtınası            |
| 4171        | Şiddetli Hava  Kış Fırtınası               |
| 1352        | Kış Fırtınası                              |
+-------------+--------------------------------------------+
SQL Server'a Giriş

HAVING

  • SELECT içinde toplu (aggregate) fonksiyonlar kullanılabilir
  • WHERE ile veriyi filtreleyin
  • GROUP BY ile veriyi gruplara ayırın
  • Peki değerleri gruplara göre nasıl toplarız?
  • ... sonra bu toplamları nasıl filtreleriz?
SQL Server'a Giriş
SELECT 
  SUM(demand_loss_mw) AS lost_demand, 
  description 
FROM grid 
WHERE 
  description LIKE '%storm' 
  AND demand_loss_mw IS NOT NULL 
GROUP BY description;
+----------- -+--------------------------------------------+
| lost_demand | description                                | 
+-------------+--------------------------------------------+
| 996         | Buz Fırtınası                              |
| 420         | Yük Kesme Şiddetli Hava   Yıldırım Fırtınası |
| 332         | Büyük Fırtına                              |
| 3           | Şiddetli Hava  Gök Gürültülü Fırtına       |
| 413         | Şiddetli Hava  Rüzgâr Fırtınası            |
| 4171        | Şiddetli Hava  Kış Fırtınası               |
| 1352        | Kış Fırtınası                              |
+-------------+--------------------------------------------+
SQL Server'a Giriş
SELECT 
  SUM(demand_loss_mw) AS lost_demand, 
  description 
FROM grid 
WHERE 
  description LIKE '%storm' 
  AND demand_loss_mw IS NOT NULL 
GROUP BY description
HAVING SUM(demand_loss_mw) > 1000;
+----------- -+--------------------------------------------+
| lost_demand | description                                | 
|-------------+--------------------------------------------|
| 4171        | Şiddetli Hava  Kış Fırtınası               |
| 1352        | Kış Fırtınası                              |
+-------------+--------------------------------------------+

`

SQL Server'a Giriş

Özet

  • GROUP BY, veriyi bir veya daha çok değerin kombinasyonlarına böler

  • WHERE, satır değerlerine göre filtreler

  • HAVING, GROUP BY ifadesinden sonra gelir ve gruplar ya da toplamlar üzerinde filtreler

SQL Server'a Giriş

Hadi becerilerimizi sınayalım!

SQL Server'a Giriş

Preparing Video For Download...