CodeGym /Kursy /SQL SELF /Top50 zapytań do bazy danych

Top50 zapytań do bazy danych

SQL SELF
Poziom 61 , Lekcja 2
Dostępny

Jak już połączyłeś wszystkie tabele swojej bazy, czas napisać kilka zapytań. Chociaż kilka – to dla początkujących. Ty już jesteś pro, więc będziesz musiał napisać 50(!) zapytań do swojej bazy danych. I to tylko te najważniejsze.

Zapytania do bazy danych

1. Pobranie listy produktów na witrynę

Zapytanie zwraca wszystkie aktywne produkty z ich główną ceną i zdjęciem do wyświetlenia na stronie głównej i w katalogu. Dzięki temu szybko budujesz witrynę i masz zawsze aktualne info o produktach.

2. Wyszukiwanie produktów po słowie kluczowym

Pozwala użytkownikom znaleźć interesujące ich produkty po nazwie lub opisie. To ważna część funkcjonalności użytkownika do szybkiego przeszukiwania katalogu.

3. Karta produktu po ID

Zwraca rozszerzone info o konkretnym produkcie, w tym markę i kategorię. Potrzebne do szczegółowego wyświetlania strony produktu.

4. Lista wariantów produktu

Wyświetla wszystkie dostępne warianty (SKU) produktu: rozmiary, kolory, stany magazynowe, ceny. Używane do wyboru odpowiedniej modyfikacji na stronie produktu.

5. Galeria zdjęć produktu

Do pełnego wyświetlenia karty produktu ważne są wszystkie jego zdjęcia. Zapytanie zwraca je z oznaczeniem zdjęcia głównego.

6. Średnia ocena i liczba opinii o produkcie

Używane do wyświetlania oceny produktu i liczby opinii, co jest ważne dla reputacji i zaufania kupujących.

7. Szczegółowa lista opinii o produkcie

Dla sekcji opinii w karcie produktu: ocena, tekst, autor i data opinii. Pomaga nowym kupującym podjąć decyzję o zakupie.

8. Pytania i odpowiedzi o produkcie

Zapytanie do pobrania pytań z odpowiedziami dla każdego produktu, co jest ważne dla bloku Frequently Asked Questions na karcie produktu.

9. Kategorie produktów z hierarchią

Pozwala wizualizować strukturę katalogu, budować drzewo nawigacji do filtrów i menu.

10. Produkty po kategorii i podkategoriach

Pomaga wyświetlić wszystkie produkty z wybranej kategorii lub jej "dzieci" (poziom zagnieżdżenia).

11. Lista marek

Do filtrowania po markach, tworzenia listy marek i landingów.

12. Popularne tagi i liczba produktów z nimi

Analizuje najczęściej używane tagi do wyświetlania trendujących produktów i budowania chmury tagów.

13. Historia zmian cen produktu

Do analityki i wyświetlania dynamiki cen (stara/nowa cena, promocje).

14. Historia zmian statusu produktu

Pozwala śledzić cykl życia produktu, powód zniknięcia z witryny lub zwrotu.

15. Wyszukiwanie po certyfikatach i licencjach

Krytycznie ważne dla profesjonalnych kupujących i segmentu B2B (jakość i legalność produktu).

16. Dane o dostawcach produktu

Ważne dla administrowania, kontroli jakości i kontaktu z dostawcami.

17. Stany magazynowe produktu według magazynów

Kontrola i ewidencja aktualnych stanów magazynowych. Potrzebne do logistyki i zapobiegania "out of stock".

18. Produkty z zapasem poniżej progu

Automatyzacja uzupełniania magazynu, zapobieganie utracie sprzedaży przez brak produktu.

19. Ruch produktu w magazynie (audyt)

Śledzenie wszystkich ruchów produktu w wybranym okresie: przyjęcia, wydania i korekty, co jest ważne dla inwentaryzacji i zapobiegania stratom.

20. Logistyka przemieszczeń między magazynami

Pozwala zobaczyć historię i status wewnętrznych przemieszczeń produktu między centrami logistycznymi.

21. Dostawa: metody i taryfy

Do wyliczania kosztu dostawy i informowania użytkownika przy składaniu zamówienia.

22. Historia zamówień użytkownika

Najważniejsza część konta – wszystkie złożone zamówienia, ich status i kwota.

23. Szczegóły zamówienia z pozycjami

Pozwala pobrać pełną strukturę zamówienia – skład, ceny, ilości – do wyświetlenia na froncie lub do wsparcia.

24. Raport zamówień za okres i według statusu

Analityka i raportowanie sprzedaży, zwraca zamówienia za okres i wybrany status (np. "zakończone").

25. "Porzucone" koszyki

Analityka dla marketingu: koszyki, dla których użytkownik nie złożył zamówienia – potencjalnie do retargetingu.

26. Top sprzedaży

Analityka do bloku "Hity sprzedaży" i zestawień marketingowych: które produkty są najczęściej kupowane.

27. Sprzedaż według dni (do wykresów)

Raport dziennego przychodu – podstawa do analizy dynamiki biznesu i budowania wykresów.

28. Lista zwrotów

Wyświetla zwroty dla wszystkich zamówień z powodem i statusem, co pomaga analizować przyczyny zwrotów.

29. Lista anulowań zamówień

Kontrola strat i przyczyn anulowań: wyświetla anulowania z powodem, kto anulował i kiedy.

30. Zamówienia oczekujące na wysyłkę

Dla magazynu i działu dostaw – zamówienia do skompletowania i wysyłki, ze szczegółami dostawy.

31. Średnia wartość zamówienia

Wskaźnik "Average Order Value" – kluczowa metryka do oceny skuteczności marketingu i asortymentu.

32. Zamówienia z użyciem kodów promocyjnych

Analityka skuteczności akcji: jakie kody promocyjne były używane i jak często.

33. Wykorzystanie rabatów według kategorii i marek

Pozwala ocenić, które akcje działają i monitorować popularność rabatów według kategorii produktów i marek.

34. Użyte kody promocyjne i ich użytkownicy

Kontrola użycia kodów promocyjnych, wykrywanie anomalii i nadużyć.

35. Historia płatności za zamówienie

Dla wsparcia i księgowości: wyświetla wszystkie transakcje płatności, ich statusy i użyte metody płatności.

36. Zamówienia ze zwrotem środków

Do analizy zwrotów, generowania raportów księgowych i zapobiegania oszustwom.

37. Saldo portfela użytkownika i historia transakcji

Kontrola i wyświetlanie środków bonusowych lub cashback użytkownika, historia ich ruchu.

38. Zgłoszenia użytkownika do wsparcia

Pozwala użytkownikowi zobaczyć swoje zgłoszenia i statusy ich rozpatrzenia.

39. SLA-analityka zgłoszeń do wsparcia

Analizuje średni czas odpowiedzi i rozwiązania problemów według priorytetu, co jest ważne dla kontroli SLA.

40. Wiadomości do zgłoszenia do wsparcia

Pozwala zobaczyć całą korespondencję do wybranego zgłoszenia, co jest ważne dla użytkownika i wsparcia.

41. Aktywne FAQ według kategorii

Wyświetla często zadawane pytania do bazy wiedzy klienta, pomaga zmniejszyć obciążenie wsparcia.

42. Aktywne kampanie marketingowe i banery

Do wyświetlania aktualnych ofert reklamowych na stronie.

43. Wybrane produkty na stronie głównej

Do bloku "Ulubione": produkty, które trzeba wyróżnić na głównej.

44. Historia testów A/B

Analiza przeprowadzonych eksperymentów do optymalizacji UX i marketingu.

45. Historia przeglądania produktu przez konkretnego użytkownika

Wyświetla "Oglądałeś" lub używane do personalizowanych rekomendacji.

46. Popularne zapytania wyszukiwania użytkowników

Analiza popytu użytkowników, pomaga optymalizować wyszukiwanie i podpowiedzi.

47. Analityka źródeł ruchu

Pozwala ocenić, które kanały reklamowe przynoszą ruch i konwersje.

48. Retencja użytkowników według kohort

Kluczowa metryka do oceny lojalności i powtórnych zakupów.

49. Wiadomości/artykuly na główną

Do wyświetlania newsów i artykułów na blogach, zwiększania zaangażowania użytkowników.

50. Aktywne strony serwisu i powiązane bloki treści

Do sprawdzania spójności treści serwisu, działania CMS i wyświetlania danych na stronach.

Dodajemy indeksy

Zapytania – spoko, ale tylko jeśli działają szybko. Dlatego musisz dodać trochę indeksów do swojej bazy. Powinieneś dodać do głównych tabel projektu 40 indeksów, żeby przyspieszyć zapytania i ułatwić eksploatację.

1. Indeks na product.product(status)

Prawie wszystkie zapytania do produktów są filtrowane po statusie (np. aktywne produkty na witrynę, wyszukiwanie itd.). Indeks przyspiesza wybieranie produktów o określonym statusie, minimalizując skanowanie całej tabeli.

2. Indeks na product.variant(product_id, is_active)

Zapytania do wariantów produktu (SKU) i na witrynę używają filtrowania po powiązaniu z produktem i aktywności wariantu. Ten złożony indeks pozwoli optymalnie wybierać wszystkie aktywne warianty danego produktu.

3. Indeks na product.image(product_id, is_main DESC)

Do pobierania głównego zdjęcia produktu (lub całej listy) używa się filtrowania po produkcie i sortowania po "główne". Indeks przyspiesza takie wybory i zapewnia szybkie zwracanie danych do galerii.

4. Indeks na product.product(name text_pattern_ops)

Do szybkiego wyszukiwania produktów po słowie kluczowym w nazwie przez ILIKE '%...%'. Specjalny indeks na wyrażeniu name text_pattern_ops poprawia wyszukiwanie po podciągu, szczególnie przy dużych wolumenach.

5. Indeks na product.product(description gin_trgm_ops)

Podobnie jak wyżej – wyszukiwanie po opisie produktu (ILIKE lub pełnotekstowe). GIN-indeks z trigramami przyspieszy filtrowanie po polach tekstowych.

6. Indeks na product.product(category_id)

Często wybiera się po kategorii lub po bezpośrednich/podkategoriach (patrz zapytania filtrujące po kategoriach katalogu). Indeks pozwala szybko znaleźć wszystkie produkty danej kategorii.

7. Indeks na product.category(parent_id)

Do budowania hierarchii kategorii i wizualizacji drzewa nawigacji często robi się wybory po parent_id. Indeks przyspieszy te rekurencyjne zapytania hierarchiczne.

8. Indeks na product.review(product_id)

Wszystkie zapytania do opinii o produkcie są filtrowane po product_id (zarówno do średniej oceny, jak i listy opinii). Indeks na tym polu znacznie przyspieszy agregację i wybieranie opinii.

9. Indeks na product.review(product_id, created_at DESC)

Do szybkiego pobierania najnowszych opinii o produkcie (ORDER BY createdat DESC), szczególnie z filtrowaniem po productid, pomaga złożony indeks.

10. Indeks na product.question(product_id, created_at DESC)

Popularne zapytanie o odpowiedzi do konkretnego produktu, z sortowaniem po czasie utworzenia. Indeks pokrywa oba warunki i przyspiesza wyświetlanie sekcji Q&A w karcie produktu.

11. Indeks na product.answer(question_id, created_at)

Do wyszukiwania odpowiedzi na pytania o produkt potrzebny jest szybki dostęp po kluczu question_id, często z sortowaniem po dacie. Ten indeks minimalizuje opóźnienia przy generowaniu Q&A.

12. Indeks na product.price_history(variant_id, changed_at DESC)

Historia zmian cen szybko pobierana po wariancie produktu i ostatnich zmianach. Taki indeks przyspiesza zapytania analityczne o dynamikę cen i “stara/nowa cena”.

13. Indeks na product.status_history(product_id, changed_at DESC)

Wybieranie historii zmian statusów produktu z sortowaniem po czasie jest potrzebne do audytu i kontroli cyklu życia produktów. Złożony indeks znacznie przyspiesza takie zapytania.

14. Indeks na product.certificate(product_id)

Wyszukiwanie certyfikatów produktu po jego id – typowa operacja dla B2B i certyfikowanych witryn. Indeks przyspiesza takie sprawdzenia.

15. Indeks na product.license(product_id)

Do wyszukiwania licencji po produktach, szczególnie w zapytaniach z filtrowaniem po typie licencji.

16. Indeks na product.product_tag(tag_id)

Częste zapytanie – pobierz wszystkie produkty po określonym tagu (i odwrotnie). Indeks pozwala szybko łączyć produkty i tagi do chmury tagów lub filtrów.

17. Indeks na product.product_tag(product_id)

Pozwala szybko sprawdzić, jakie tagi są przypisane do danego produktu, przyspieszając wybieranie po tagach.

18. Indeks na logistics.inventory(product_id, warehouse_id)

Do natychmiastowego dostępu do stanów magazynowych produktu (lub do wyliczenia po wszystkich magazynach) – krytyczne dla logistyki, sprawdzania stock level i witryn w czasie rzeczywistym.

19. Indeks na logistics.inventory(variant_id)

Do ewidencji zapasów po konkretnym wariancie produktu (kolor/rozmiar) i do przekrojowych raportów.

20. Indeks na logistics.stock_level(product_id, warehouse_id)

Szybkie sprawdzenie minimalnego progu produktu w magazynie (np. do autozamówienia lub sygnalizacji niskiego poziomu). Taki indeks potrzebny do porównania z inventory.

21. Indeks na logistics.inventory_movement(product_id, changed_at DESC)

Pozwala szybko pobierać historię przemieszczeń produktu (audyt) za ostatnie okresy – przydatne do zapobiegania błędom, analizy strat i kontroli dostaw.

22. Indeks na logistics.transfer(product_id, requested_at DESC)

Do analizy logistyki przemieszczeń między magazynami, filtrowania po produkcie i sortowania po dacie zgłoszenia.

23. Indeks na logistics.shipping_rate(shipping_method_id, destination_zone)

Przy wyliczaniu kosztu dostawy często wybiera się taryfę po id metody i strefie docelowej. Indeks przyspiesza obliczenia dla klienta przy składaniu zamówienia.

24. Indeks na "order".order(user_id, placed_at DESC)

Wszystkie zapytania do historii zamówień użytkownika używają filtrowania po user_id i sortowania po dacie złożenia. Złożony indeks zapewnia szybkie zwracanie historii zamówień do konta użytkownika.

25. Indeks na "order".order(status, placed_at)

Do analityki i raportów zamówień za okresy, a także wyszukiwania po statusie (np. "w realizacji"/"zakończone").

26. Indeks na "order".order_item(order_id)

Pobieranie wszystkich pozycji zamówienia po id zamówienia – jedna z najczęstszych operacji do szczegółów zamówień.

27. Indeks na "order".order_item(product_id)

Analityka sprzedaży i statystyki po produktach wymagają szybkiego wybierania pozycji zamówień po id produktu.

28. Indeks na "order".return(order_id)

Powiązanie zwrotów z zamówieniami używane do wsparcia i analityki zwrotów. Indeks przyspiesza wyszukiwanie zwrotów po numerze zamówienia.

29. Indeks na "order".cancellation(order_id)

Podobnie jak zwroty – przyspiesza wykrywanie anulowań zamówienia do analityki i wsparcia.

30. Indeks na "order".cart(user_id, updated_at DESC)

Do wyszukiwania ostatnich koszyków użytkownika (np. wyszukiwanie “porzuconych” koszyków), wygodnie mieć indeks po user_id z sortowaniem po dacie ostatniej aktualizacji.

31. Indeks na payment.payment_transaction(order_id)

Większość zapytań do historii płatności używa filtrowania po konkretnym zamówieniu. Indeks zapewnia natychmiastowy dostęp do transakcji zamówienia.

32. Indeks na payment.refund(transaction_id)

Pozwala efektywnie znaleźć zwroty po konkretnej transakcji do wsparcia, raportowania i kontroli oszustw.

33. Indeks na payment.wallet(user_id)

Szybki dostęp do portfela użytkownika do sprawdzenia salda i historii operacji.

34. Indeks na payment.wallet_transaction(wallet_id, created_at DESC)

Wybieranie po transakcjach portfela użytkownika z sortowaniem po dacie (np. wyświetlanie historii operacji).

35. Indeks na support.support_ticket(user_id, created_at DESC)

Historia zgłoszeń konkretnego użytkownika do wsparcia (konto/serwis klienta). Złożony indeks optymalizuje takie wybory.

36. Indeks na support.ticket_message(ticket_id, sent_at)

Do wyświetlania całej korespondencji do zgłoszenia wygodnie mieć indeks po zgłoszeniu i dacie – to przyspiesza sortowanie wiadomości po czasie.

37. Indeks na support.ticket_sla_tracking(ticket_id)

Do SLA-analityki i kontroli po każdym zgłoszeniu, szybki dostęp do danych SLA zapewnia indeks po ticket_id.

38. Indeks na marketing.promo_usage(user_id, used_at DESC)

Do analizy aktywności użytkowników po kodach promocyjnych (i analityki, i ochrony przed nadużyciami), potrzebne szybkie wyszukiwanie po user_id z sortowaniem po czasie.

39. Indeks na analytics.product_view(user_id, viewed_at DESC)

Przechowywanie i analiza historii przeglądania produktów przez użytkownika (personalizacja, rekomendacje) wymaga szybkiego dostępu po user_id z sortowaniem po czasie przeglądania.

40. Indeks na analytics.search_query_log(query_text)

Popularne zapytania i częstotliwość ich użycia – kluczowe narzędzie analityczne wyszukiwania. Indeks przyspiesza agregacje i zliczanie po tekście zapytania.

Uwaga

Do wyszukiwań tekstowych po ILIKE zaleca się użycie GIN-indeksów z rozszerzeniem pg_trgm, które są efektywne do wyszukiwania podciągów i fuzzy search. Dla dużych tabel z agregacją po datach lub sortowaniem po dacie zaleca się indeks DESC na dacie – to przyspiesza wybieranie najnowszych rekordów.

Warto dostosowywać indeksy do realnych planów wykonania i statystyk obciążenia, ale powyższe indeksy pokrywają główne scenariusze produkcyjne zapytań do naszego marketplace.

Dodajemy funkcje

Jeszcze nie masz dość? To napiszmy jeszcze kilka funkcji, żeby uprościć pisanie naszych obecnych i przyszłych zapytań. Tak, żeby przyspieszyć realizację kluczowych zapytań, zmniejszyć duplikację kodu w aplikacji i scentralizować logikę biznesową po stronie bazy danych.

1. Wyszukiwanie produktów po słowie kluczowym z uwzględnieniem tagów i marek

Po co:

Zwykłe wyszukiwanie po nazwie i opisie jest ograniczone. Często trzeba szukać produktów także po tagach i markach. Uniwersalna funkcja centralizuje logikę rozszerzonego wyszukiwania, zmniejsza duplikację kodu i upraszcza integrację z frontendem.

2. Pobieranie pełnej karty produktu po ID (wszystkie dane do karty)

Po co:

Na froncie często potrzebne są od razu wszystkie informacje o produkcie: główne pola, marka, kategoria, zdjęcia, tagi, atrybuty, średnia ocena i liczba opinii. Funkcja buduje pełną kartę produktu jednym wywołaniem, zmniejszając liczbę zapytań do bazy.

3. Pobieranie hierarchii kategorii z zagnieżdżeniem

Po co:

Budowanie drzewa (lub ścieżki) kategorii jest potrzebne do witryny, filtrów i breadcrumbs. Zamiast rekurencyjnych zapytań w kodzie klienta funkcja zwraca całą hierarchię naraz.

4. Wyliczanie średniej ceny i min/max po kategorii

Po co:

Do filtrów w katalogu i analityki wygodnie pobierać zagregowane statystyki po produktach w kategorii: zakres cen, średnia wartość. Funkcja eliminuje powtarzające się podzapytania.

5. Sprawdzanie i automatyczne liczenie stanów magazynowych produktu we wszystkich magazynach

Po co:

Pozwala natychmiast poznać ogólny stan produktu (i każdego wariantu), co jest przydatne do witryny, magazynu i logistyki. Centralizuje wyliczenie, zapobiegając duplikacji logiki biznesowej.

6. Pobieranie historii zamówień użytkownika ze szczegółami

Po co:

Funkcja zwraca listę zamówień użytkownika, w tym pozycje zamówienia, kwoty, statusy, pozwalając frontendowi pobrać historię jednym wywołaniem i od razu budować konto użytkownika.

7. Pobieranie średniej oceny użytkownika jako sprzedawcy/kupującego

Po co:

Do wyświetlania zaufania i reputacji użytkownika na platformie ważna jest jego średnia ocena jako sprzedawcy lub kupującego. Funkcja robi agregację.

8. Użycie kodu promocyjnego przez użytkownika (walidator ze wszystkimi warunkami)

Po co:

Cała logika biznesowa sprawdzania i wykorzystania kodu promocyjnego (aktywność, limity, data itd.) jest scentralizowana w jednej funkcji. To upraszcza logikę aplikacji i chroni przed błędami przy duplikacji warunków.

9. Uniwersalna funkcja logowania zdarzeń użytkownika

Po co:

Do przekrojowej analityki i audytu scentralizowane logowanie zdarzeń zmniejsza duplikację kodu i ryzyko utraty danych o działaniach użytkowników.

10. Funkcja pobierania salda portfela bonusowego i sumy naliczeń za cały czas

Po co:

Jedno wywołanie pozwala od razu pobrać aktualne saldo użytkownika i sumę wszystkich naliczeń do portfela. To wygodne do wyświetlania na dashboardzie i zmniejsza liczbę zapytań SQL.

11. Uniwersalna funkcja zmiany statusu zamówienia z logowaniem

Po co:

Zmienia status zamówienia, dodaje wpis do logu historii statusów i minimalizuje błędy przy zmianie statusów w różnych częściach aplikacji.

12. Pobieranie wszystkich wiadomości dialogu wsparcia (ticket + wszystkie wiadomości)

Po co:

Funkcja zwraca całą korespondencję do zgłoszenia, w tym szczegóły zgłoszenia i każdą wiadomość. To ułatwia budowanie historii zgłoszenia na froncie.

13. Sprawdzanie istnienia użytkownika po emailu lub telefonie

Po co:

Używane do rejestracji i odzyskiwania hasła, zapobiega duplikacji logiki na froncie i backendzie.

Uwaga

Ten zestaw funkcji pokrywa kluczowe scenariusze biznesowe, zwiększa wygodę pracy z danymi, optymalizuje logikę i przyspiesza rozwój frontendu i integracji. Mam nadzieję, że się spodobało :)

Pliki z rozwiązaniem

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION