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

Zpět na blog

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

Líbil se vám článek? Sdílejte ho s ostatními

nebo nám napište něco hezkého. Děkujeme!

Zpět na blog

Python - základy

Naučte se základy Pythonu - populárního jazyka, který vzal datovou vědu doslova útokem.

Zobrazit kurz

Python pro každý den

Jak si užít Python a nezabloudit v kódu

Zobrazit knihu

SQL pro analytiky 2 - pokročilí

Naučte se vytvářet složité dotazy, databázové objekty a používat pokročilé funkce jazyka SQL.

Zobrazit kurz

Hledáme další autory

Publikujte na Lovely Blogu a inspirujte ostatní! Sdílením svých znalosti si budujete osobní značku.

Kontaktujte nás

Odběr novinek

Novinky, návody a tipy přímo do vašeho emailu.

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

Designed by grafikli.cz in Prague.