Pobieranie danych według zakresów czasowych

MySQL - Analiza danych Zostaw komentarz

Czasami zachodzi potrzeba sprawdzenia czy np. w danym sklepie internetowym mamy wzrost zamówień, czy spadek. Jak tego dokonać? Najprościej jest zadać odpowiednie zapytanie, które nam policzy ilość zamówień (albo utarg) w danych przedziałach czasowych.

Moja tabela zamowienia składa się z następujących pól:

  • imie klienta
  • nazwisko klienta
  • … inne dane adresowe …
  • kwota do zapłaty
  • data zamówienia (w formacie UNIX, czyli ilość sekund, które upłynęły od początku roku 1970)
  • status zamówienia (0-nowe, 1-opłacone itp.)
  • … inne dane nieistotne do omówienia tego zagadnienia …

To czy będziemy badać ilość zamówień, czy utarg nie jest w tej chwili istotne (najlepiej badać te 2 rzeczy bo dzięki temu będziesz mógł łatwo policzyć średnią wartość koszyka zmieniającą się w czasie 🙂

No więc, aby policzyć utarg naszego sklepu od początku jego istnienia wystarczy zadać proste zapytanie:
SELECT sum(kwota) FROM zamowienia AND status=1
No dobra, ale co zrobić, aby podać utarg, ale z rozbiciem na miesięczne okresy? Tutaj są dwa sposoby. Pierwszy na jaki wpadłem to prosta pętla w PHP, która generuje mi szereg zapytań w postaci:
SELECT sum(kwota) FROM zamowienia WHERE data>=$data1 AND data<$data2 AND status=1
Zawartość zmiennej $data1 i $data2 można obliczyć za pomocą PHPowej funkcji mktime. Jest to proste rozwiązanie, ale jeśli sklep internetowy istnieje 2 lata to zadajemy bazie danych 24 zapytania (dla każdego miesięcznego okresu zadajemy po jednym zapytaniu). Ot nic wielkiego, baza danych to przeżyje. Ale co będzie, jeśli sklep istniej 10 lat?? Wtedy trzeba będzie zadać aż 120 zapytań!!

Ale jest na to sposób. Otóż z pomocą przychodzi klauzura GROUP BY!!  Tak, pomimo, że mamy czas zamówienia zapisany jako znacznik czasu unixa można za pomocą odpowiednich funkcji konwertujących wyłowić z owej daty miesiąc i rok a następnie dać to do GROUP BY! Oto prosty przykład:
SELECT year(from_unixtime(data)), month(from_unixtime(data)), sum(kwota) FROM zamowienia status=1 group by month(from_unixtime(data)), year(from_unixtime(data)), ORDER BY year(from_unixtime(data)), month(from_unixtime(data))
Być może przykład na pierwszy rzut oka wygląda strasznie, ale wcale nie jest taki straszny. Otóż pobieramy rok, miesiąc i utarg z tabeli zamówienia (uwzględniamy tylko zamówienia opłacone – status=1) i grupujemy dane według roku, miesiąca i dodatkowo je sortujemy, aby nie były chaotycznie podawane.

Jak widzisz, jedno proste zapytanie dostarcza nam sporo fajnych informacji!!

Tagi: ,

Zanim dodasz komentarz, zapoznaj się z kilkoma podstawowymi zasadami:

  1. Jeśli zamiast imienia (lub pseudonimu) wpiszesz jakiś mało logiczny ciąg znaków np. asdfg, to taki komentarz zostanie usunięty.
  2. Jeśli się za kogoś podszywasz, to taki komentarz zostanie usunęty
  3. Jeśli zamiast imienia (pseudonimu) wpiszesz jakieś słowo kluczowe (np. tani hosting), to taki komentarz zostanie usunięty
  4. Jeśli Twoim jedynym celem jest zareklamowanie się, to taki komentarz zostanie niezwłocznie usunięty
  5. Komentarze nie związane z tematem notki są kasowane.
  6. Komentarze, które zawierają wulgarne słowa, bądź są obraźliwe (nie dotyczy konstruktywnej krytyki) są kasowane.
  7. Komentarze z mailem typu "nie.podam@coś.tam.pl" są kasowane
  8. Komentarze pisane niechlujnie (bez interpunkcji, w błędami ortograficznymi, z licznymi literówkami, pisane WIELKIMI LITERAMI) są kasowane

Zostaw komentarz

WordPress - Hosting: Twój hosting - Skórka: N.Design Studio - Spolszczenie: Adam Klimowski.
RSS wpisów RSS komentarzy Zaloguj się