Zanim pogubisz się w składni SQL i zmiennych, pamiętaj: funkcje agregujące to twoi najlepsi kumple przy liczeniu wszystkiego, co się da. Pomagają wyliczać sumy, średnie i robić całą magię na dużej liczbie wierszy.
Funkcje agregujące używa się do wykonywania operacji matematycznych na grupach wierszy. Najważniejsze z nich to:
SUM(): liczy sumę wartości.AVG(): wylicza średnią wartość.COUNT(): liczy liczbę wierszy w wyniku.
Funkcje agregujące są przydatne, gdy pracujesz z dużą ilością danych i chcesz dostać szybki raport: ile masz zamówień, jaka jest ich łączna wartość, albo jaki był największy rachunek dzisiaj. Zobaczmy kilka funkcji agregujących.
Liczenie wierszy: funkcja COUNT()
Funkcja COUNT() pozwala policzyć liczbę wierszy w tabeli. Przeanalizujmy jej działanie na przykładach.
-- Proste liczenie wszystkich wierszy w tabeli zamówień
SELECT COUNT(*) AS total_orders
FROM orders;
-- Liczenie unikalnych klientów
SELECT COUNT(DISTINCT customer_id) AS unique_customers
FROM orders;
-- Liczenie zamówień, gdzie suma jest większa niż 100
SELECT COUNT(*) AS high_value_orders
FROM orders
WHERE total_amount > 100;
Funkcja COUNT() jest często używana do liczenia rekordów, unikalnych wartości, a także w połączeniu z filtrowaniem, na przykład "ilu studentów zapisało się na kursy z Python".
Sumowanie danych: funkcja SUM()
Funkcja SUM() liczy sumę wartości w kolumnie. Policzmy teraz sumę wszystkich zakupów klientów.
-- Liczenie całkowitego przychodu
SELECT SUM(total_amount) AS total_revenue
FROM orders;
-- Suma zakupów konkretnego klienta
SELECT SUM(total_amount) AS customer_spending
FROM orders
WHERE customer_id = 101;
-- Suma zamówień według kategorii
SELECT category, SUM(total_amount) AS category_revenue
FROM orders
GROUP BY category;
SUM() to główne narzędzie do analizy sprzedaży, przychodów i wszelkich innych sum. Na przykład, chcesz znać dochody centrum biznesowego za ostatni miesiąc? Prościzna.
Średnie wartości: funkcja AVG()
Funkcja AVG() pomaga wyliczyć średnią wartość z danych. Na przykład, średnia ocena studentów albo średni rachunek klienta.
-- Średnia wartość zamówienia
SELECT AVG(total_amount) AS average_order_value
FROM orders;
-- Średnia wartość zamówień według kategorii
SELECT category, AVG(total_amount) AS average_order_value
FROM orders
GROUP BY category;
-- Średni rachunek klientów z ostatnich 7 dni
SELECT AVG(total_amount) AS avg_check_last_week
FROM orders
WHERE order_date >= NOW() - INTERVAL '7 days';
Średnia wartość jest przydatna do analizy jakości obsługi, wykrywania anomalii i liczenia kluczowych metryk, jak średni zysk na klienta.
Użycie funkcji agregujących w analizie
Teraz, gdy znamy podstawowe funkcje, zobaczmy jak użyć ich do tworzenia podstawowych raportów analitycznych.
Przykład 1: całkowity przychód i liczba zamówień
Załóżmy, że chcesz wiedzieć, ile zamówień złożono i jaki był całkowity przychód w danym miesiącu.
SELECT
COUNT(*) AS total_orders,
SUM(total_amount) AS total_revenue
FROM orders
WHERE order_date >= '2023-10-01' AND order_date <= '2023-10-31';
Przykład 2: średni przychód według kategorii
A co jeśli chcemy rozbić przychód według kategorii produktów?
SELECT
category,
COUNT(*) AS total_orders,
SUM(total_amount) AS total_revenue,
AVG(total_amount) AS avg_order_value
FROM orders
GROUP BY category;
Przykład 3: zamówienia z ostatnich 7 dni
Często trzeba analizować metryki z krótkich okresów, na przykład z ostatniego tygodnia.
SELECT
COUNT(*) AS orders_last_week,
SUM(total_amount) AS revenue_last_week,
AVG(total_amount) AS avg_check_last_week
FROM orders
WHERE order_date >= NOW() - INTERVAL '7 days';
Praktyczne case'y z konkretnymi zadaniami
Zadanie: Analiza sprzedaży według regionów
Załóżmy, że jesteś właścicielem sieci sklepów i chcesz analizować, jak rozkłada się przychód według regionów.
SELECT
region,
COUNT(*) AS total_orders,
SUM(total_amount) AS total_revenue,
AVG(total_amount) AS average_order_value
FROM orders
GROUP BY region
ORDER BY total_revenue DESC;
Zadanie: Top-10 klientów według przychodu
Dodajmy trochę logiki, żeby wyłonić top-10 klientów według sumy zamówień.
SELECT
customer_id,
SUM(total_amount) AS total_spending
FROM orders
GROUP BY customer_id
ORDER BY total_spending DESC
LIMIT 10;
Zadanie: Porównanie przychodu według dni tygodnia
Chcesz wiedzieć, w które dni tygodnia twój biznes zarabia najwięcej? Oto przykład:
SELECT
TO_CHAR(order_date, 'Day') AS day_of_week,
SUM(total_amount) AS total_revenue,
AVG(total_amount) AS avg_order_value
FROM orders
GROUP BY TO_CHAR(order_date, 'Day')
ORDER BY total_revenue DESC;
GO TO FULL VERSION