SQL - analýza zákazníků (MIN, MAX, LIMIT/TOP, ROW_NUMBER)

MIN MAX LIMIT TOP ROW_NUMBER CTE

Na jednoduchých příkladech si ukážeme, že analýza dat pomocí SQL je rychlá a snadná. Další výhodou těchto příkladů je, že se podobná zadání objevují u pohovorů. 😉

Pokud nemáte databázový server nainstalovaný lokálně, můžete využít SQL v cloudu. Např. sqliteonline.com nebo sqlfiddle.com.

Vytvoření databáze

Nejdřív si vytvoříme databázi a v ní několik řádků.

CREATE TABLE prodej
(
  id INT,
  zakaznik VARCHAR(100),
  celkem DECIMAL(8,2)
);

INSERT INTO prodej VALUES (1, 'Dovoz potravin, s.r.o.', 150000);
INSERT INTO prodej VALUES (2, 'Prodej textilu, a.s.', 20000);
INSERT INTO prodej VALUES (3, 'Zážitková agentura, s.r.o.', 350000);
INSERT INTO prodej VALUES (4, 'Restaurace a stravování, spol s r.o.', 1000);
INSERT INTO prodej VALUES (5, 'Průmysl, a.s.', 900000);

1. Zobrazte zákazníka s nejvyšším obratem

Použijeme poddotaz (subquery) a funkci MAX, která vrací nejvyšší hodnotu.

SELECT *
  FROM prodej
  WHERE celkem = (
    SELECT MAX(celkem)
      FROM prodej
    );
id | zakaznik      | celkem   
---+---------------+----------
 5 | Průmysl, a.s. | 900000.00

2. Zobrazte zákazníka s nejnižším obratem

Budeme postupovat stejně, jako v předchozím příkladě, jen použijeme funkci MIN, která vrací nejnižší hodnotu.

SELECT *
  FROM prodej
  WHERE celkem = (
    SELECT MIN(celkem)
      FROM prodej
    );
id | zakaznik                             | celkem 
---+--------------------------------------+--------
 4 | Restaurace a stravování, spol s r.o. | 1000.00

3. Zobrazte první tři zákazníky podle obratu

Seřadíme si data pomocí ORDER BY a pak použijeme funkci LIMIT/TOP.

-- PostgreSQL
SELECT *
  FROM prodej
  ORDER BY celkem DESC
  LIMIT 3;

-- SQL Server
SELECT TOP 3 *
  FROM prodej
  ORDER BY celkem DESC
id | zakaznik                   | celkem   
---+----------------------------+----------
 5 | Průmysl, a.s.              | 900000.00
 3 | Zážitková agentura, s.r.o. | 350000.00
 1 | Dovoz potravin, s.r.o.     | 150000.00

4. Vyberte zákazníka, který má druhý nejvyšší obrat

Zde využijeme CTE (Common Table Expressions) a funkci ROW_NUMBER, která nám "očísluje" vrácené řádky.

Výhodou tohoto postupu je, že snadno můžeme vybírat zákazníky podle obratu pouhou změnou čísla.

WITH zakaznici AS (
  SELECT ROW_NUMBER() OVER (ORDER BY celkem DESC) AS rn, *
    FROM prodej
)
SELECT * FROM zakaznici
  WHERE rn = 2;  -- Druhý nejvyšší obrat
rn | id | zakaznik                   | celkem   
---+----+----------------------------+----------
 2 |  3 | Zážitková agentura, s.r.o. | 350000.00

LovelyData

Jste z oboru a máte co říct?

Nenechávejte si to pro sebe a publikujte na Lovely Blogu.

Odběr novinek

Novinky, návody, kurzy a exkluzivní slevy. Získejte informace jako první. Stačí jen zadat e-mail. Je to zdarma a odhlásit se můžete kdykoliv.

Copyright © 2018-2021, Colorbee, s.r.o.

Design by grafikli.cz

Používáme cookies pro lepší uživatelský zážitek. Používáním webu s tím vyjadřujete souhlas a zároveň potvrzujete, že jste se seznámil/a s Prohlášením o ochraně osobních údajů.

Fotografie: lektoři, grafikli.cz, icons8.com