CASE – WYSYŁKA OFERTY PRENUMERATY, POST NR 3



Marcinie, 

I kontynuujemy.

Dla tych co by też chcieli, a nie wiedzą o co chodzi to polecam zajrzeć pod linki: 




Dzisiaj ustaliłem sam ze sobą, iż do realizacji oczekiwać moich będzie potrzebna jakaś tabela z dniami, taki  mój kalendarz.
Kwerenda poniżej daj mi informację o maksymalnej liczbie dni pomiędzy datą wysyłki a datą najpóźniejszej odpowiedz.
Stąd wiem, że to jest 125 dni, czyli kalendarz musi się zaczynać 31 grudnia 2014, mieć co najmniej 125 dni by móc w czasie zobaczyć rozkład zdobytych prenumerat, to ja będę miał tych dni 200 :-)

select
max(datediff (dd, data_wysylki, data_odpowiedzi))  as najpozniejsza_reakcja
from wysylka_1 where data_odpowiedzi is not null;


Wynik kwerendy powyżej to 125 dni.

A po linką poniżej katalog, w którym to znajdziesz kod do utworzenia kalendarza oraz narzędzie w excel konstruujące w prosty sposób „INSERT”. 




CASE – WYSYŁKA OFERTY PRENUMERATY, POST NR 2



Marcinie, 

I ćwiczymy zatem na danych zgromadzonych w tabeli wysylka_1
Dla tych co by też chcieli, a nie wiedzą o co chodzi to polecam zajrzeć pod linkę: 


Na początek prosta kwestia:

  • podaj podstawowe informacje o zebranych danych, ale już agregowane ze względu na datę wysyłki, płeć odbiorcy, województwo odbiorcy,
  • podaj średni czas odpowiedzi, najszybszy czas reakcji, najdłuższy czas reakcji,
  • podaj ilu ludzi nie zareagowała i ilu zareagowało na naszą wysyłkę.

Wszystkie odpowiedzi są do uzyskania zaprezentowaną na rysunku kwerendą. 



1 – W zasadzie tu nie musi być, bo musi tak naprawdę w sekcji po GROUP BY, ale tu też bardzo często występuje, bo podzielenie zbioru, wyliczenie wartości, a później brak informacji kogo dotyczy informacja… nieco bez sensu. 

A dlaczego? Bo zbiór wszystkich 200 wierszy podzielimy na podzbiory/grup według województwa, daty wysyłki, płci, na tym polega grupowanie. To tak jak w szkole, przecież mamy uczniów, oni są podzieleni na klasy i dopiero wówczas się liczy średnią ocen, grupowanie nastąpiło dawno temu, nawet nie pamiętamy kiedy J To bardzo częste w życiu, na co nie zwracamy nawet uwagi, jest to naturalne. Pracując z danymi musimy to czynić jawnie, komputer nie czyta nam w myślach. 

2 – To samo co wyżej oraz użyłem klauzulę CASE, przy jej pomocy określam wartość w dodatkowym polu, to dodatkowe pole (kolumna) będzie się nazywać  CZY_ODPOWIEDZ, będzie zawierać wartości dwie, BRAK lub OK. To według tych etykiet też podzielmy nasz zbiór danych, to też skopiuję do sekcji po GROUP BY. 

3 – Ta sekcja, to miejsce gdzie liczymy / podajemy jakie wartości dla każdego podzbioru określimy, a zatem policzymy ile wierszy w podzbiorze jest, policzymy średni czas odpowiedzi w podzbiorze, najdłuższą odpowiedź, najkrótszą odpowiedź. Tu zwracam uwagę na nowinkę, jeżeli chcemy uzyskać liczbę dni pomiędzy dwoma datami to musimy wykorzystać funkcję DATEDIFF (… , data1, data2). Jeżeli w miejscu kropek podamy dd, to uzyskamy liczbę dni pomiędzy datami, mm – to liczba miesięcy, a yy – to liczba lat. 

4 – Na początku tego wiersza są dwa myślniki, taki sposób zapisu powoduje, że wiersz jest traktowany jako komentarz do kwerendy, zatem zostanie pominięty przy wykonywaniu kwerendy, odkomentowanie, tj. usunięcie tych myślników, spowoduje że zostanie wiersz  odczytany, zostaną zgodnie z treścią pominięte z wyniku zapytania wiersze niemające wypełnionego pola DATA_ODPOWIEDZI. 

5 – tu musisz wiedzieć, że gdy pomiędzy SELECT a WHERE chcesz uzyskać wartości agregowane, np. liczby wierzy, średnie …. To musisz podpowiedzieć bazie jak ma podzielić zbiór, tu podajesz po GROUP BY, które pola są dla ciebie ważne, według nich podzielony zbiór. Tu bardzo często musisz po prostu zawrzeć to samo co jest pomiędzy SELECT a WHERE, a nie jest agregowanym polem. Dlaczego takie powtarzanie jest konieczne, ano dlatego że tak naprawdę nie musisz pomiędzy SELECT a WHRERE wyświetlać wartości np. pola „DATA_WYSYLKI”, a pogrupować możesz chcieć, co prawda nieczytelny staje się wynik, ale tak można, nie ma obowiązku powtarzania treści. 

I co widać, jak wykonasz kwerendę :-)
 
Zobacz czy to samo co mnie, jak masz pytania to daj znać.


I kwerenda byś nie musiał przepisywać:

select

data_wysylki
, plec
, wojewodztwo
, case when data_odpowiedzi is null then 'BRAK' else 'OK' end czy_odpowiedz
, count(*) liczba_obserwacji
, avg ( datediff (dd, data_wysylki, data_odpowiedzi) ) sredni_czas_odpowiedzi
, max ( datediff (dd, data_wysylki, data_odpowiedzi) ) najdluzsza_odpowiedz
, min ( datediff (dd, data_wysylki, data_odpowiedzi) ) najkrotsza_odpowiedz

 from wysylka_1
-- where data_odpowiedzi is not null
 group by data_wysylki, plec, wojewodztwo, case when data_odpowiedzi is null then 'BRAK' else 'OK' end
 order by 1, 2, 3;
 


CASE – WYSYŁKA OFERTY PRENUMERATY, POST NR 1



Cześć, 


Marcinie, kilka trików tytułem przypomnienia, powtórzenia, utrwalenia. Nim przejdziemy do ćwiczeń to musi być materiał, na którym popracujemy.


Zatem:  Wydawnictwo: Super Prenumeraty, to wydawnictwo oferuje prenumeratę czasopisma TAJEMNICE ŚWIATA, jedynie drogą pocztową sprzedaje. 


To wydawnictwo zaoferowało w dniu 31 grudnia 2014 roku 100 klientom  prenumeratę za 50% ceny, jeżeli od razu zdecydują się na 2 lata. Analogiczną akcję przeprowadziło 28 lutego 2015.


W tabeli WYSYLKA_1 są zgromadzone podstawowe informacje, do kogo została skierowana promocja oraz w przypadku gdy dana osoba pozytywnie zareagowała na ofertę w polu DATA_ODPOWIEDZI jest data prenumeraty.

Proszę Marcinie utwórz tabelę WYSYLKA_1, załaduj dane do niej oraz wykonaj drobne podsumowania/grupowania, sprawdź czy rzeczywiście jest 200 wierszy w tabeli, i tym podobne. 


Kod do utworzenia tabeli, prezentacja, excel w w którym konstruowałem INSERT, to jest dostępne pod następującymi linkami. 






I tak przy okazji, nie przejmuj się, że to tylko 200 wierszy. To nie jest słaby przykład. Przykłady nie muszą, nie ma potrzeby by były liczebne.


No bo wyobraźmy sobie, mam 100 klientów, w tym 10% odpowiedziało… ale nie, to mała próba… z „wyobraźmy sobie” jest ten problem, że wystarczy pomnożyć przez 100 i już będzie duża próba. 


Gdybyśmy badali rzeczywistą sytuację, to trzeba korzystać z danych, jak jest wysyłka kierowana do 1 mln osób, to by zbadać procent zwrotów, to skorzystać trzeba z danych w komplecie, ale do ćwiczeń wymyślać miliona nie ma sensu.


W. 







AdwentureWorksLT 2012, jak podczepić, jak zrobić diagram!



Dzieci rosną, już w walce o komputer mają silne argumenty. A też i inne zmiany miały miejsce. Dlatego zainwestowałem w sprzęt. Przerwa na blogu też wynikała z niedoboru sprzętu :-)


Nabyłem T400, Lenovo, chyba 6 letni sprzęt, 2 GB RAMU, z wersją legalną WINDOWS 7 wersja 64 bitowa, za 400 PLN na Allegro. Działa, starcza.


Na tym to sprzęcie zainstalowałem bazę SQL Server Microsoftu w wersji 2014 oraz Microsoft Management Studio. I teraz potrzeba jest przykładowa baza, no naklikałem się, aż w końcu skutecznie ściągnąłem bazę demonstracyjną  AdwentureWorksLT 2012.


I co więcej, skutecznie podczepiłem, widzę ją, udało mi się utworzyć diagram dla tej bazy, tj. taki obrazek klockowy tabelek i połączeń miedzy nimi, bo to nie SQL jest najtrudniejszy.

To wiedza co, gdzie jest w bazie jest kluczowa :-)


Linka prezentacji jak podczepiłem przykładową bazę i zrobiłem diagram.



I linka do jednego z tekstów na blogu, jak startować bazę.




W.