Byłem na grzybach i znalazłem … telefon



Marcinie, 

Ostatnio zachwalałem książkę „Pułapki myślenia” a dzisiaj ponownie do tego wrócę. Byłem na grzybach. Jak to grzybiarz, kiwałem się między brzózkami licząc na to, iż dojrzę jakiś czerwonawy kapelusz i nie będzie to oczywiście wszechobecny muchomor.

Kiwam się, się kiwam, krążę..., dzień dobry, dzień dobry, to innym spotykanym grzybiarzom… i widzę leży: telefon.

Telefon ma oczywiście określoną wartość rynkową  (tak, przyjmijmy, że sobie go przywłaszczę, ale tylko teoretycznie, na potrzeby ćwiczenia) i wiąże się z tym znaleziskiem jakaś radość (wartość psychologiczna).

i wyobraź sobie Marcinie...

jak radość moja istotnie wzrosła, pomimo nadal tej samej wartości rynkowej telefonu, gdy uzmysłowiłem sobie, że to mój. 

Po prostu uzmysłowiłem sobie, że nie tyle zyskałem, co uniknąłem straty. 
To zjawisko w skrócie można w jednym zdaniu określić:

Jak to mawiają Anglosasi: strata boli bardziej, niż zysk cieszy” 

A na rysunku zaczerpniętym  z polecanej książki "Pułapki myślenia" Daniela Kahnemana wygląda to jak niżej. Jeżeli przeraża Ciebie Marcinie grubość książki, to na początek przeczytaj dwa artykuły z poradnika dla graczy: 





I grzyby :-)


W.

Sortowanie – order by…



Marcinie, homo sapiens jak już widzi tabelę to automatycznie spodziewa się, iż jest ona jakoś posortowana np. alfabetycznie, od najniższej ceny do najwyższej – rzadko kto chce na początku widzieć najwyższą :-) 

A serwer bazy danych w swoich tabelach… okazuje się, iż nie przechowuje rekordów w sposób uporządkowany, dla serwera danych kolejność rekordów nie ma znaczenia i tyle.

Tu pozwolę sobie wkleić obrazek ze wskazówką zaczerpniętą z polecanej już przeze mnie książki dostępnej tutaj: http://helion.pl/ksiazki/praktyczny-kurs-sql-wydanie-iii-danuta-mendrala-marcin-szeliga,pksql3.htm 



Czyli wynik zapytania jest sortowany dla użytkownika, a sortuje się go poprzez dodanie na końcu zapytania klauzuli ORDER BY …. W miejsce kropek najlepiej podać nazwę pola/kolumny według, której należy sortować. Możesz podać więcej pół. Domyślnie następuje sortowanie rosnąco, dodanie po nazwie pola DESC spowoduj zmianę sortowania, czyli malejąco.

Zamiast nazwy pola/kolumny można podawać numer  pola z zapytania, ale tu zdarzają się niespodzianki, szczególnie kiedy pracujesz nad tym co w sekcji pomiędzy SELECT …. a FROM, po prostu pole wcale nie musi być pierwsze bo stanie się drugie, kiedy coś sobie dopiszesz, a zapomnisz poprawić numer po ORDER BY.


Czyli: 

SELECT
imie, nazwisko, adres 
from ADRES WHERE imie=’Jan’ 
ORDER BY nazwisko; 

Spowoduje wybranie  z bazy danych i posortowanie według nazwiska, można wskazać numer pola tj. 2. Sortowanie danych zapisanych fizycznie w bazie odbywa się poprzez zakładanie indeksów i jest to realizowane, bo przyspiesza dostęp do danych, ale o tym innym razem.


W.

 

Biblia analityków to...



Marcinie,



Bieżący rok jest z racji wyborów, referendum bardzo gorący, w mediach, rozmowach prywatnych, publicznych jest bardzo dużo stosunkowo prostych haseł, komunikatów, uproszczeń, których celem jest po prostu szybkie przekonanie do siebie, a niekoniecznie to jest zgodnie z faktycznym zainteresowaniem czy też powszechnym przekonaniem, zapotrzebowaniem społecznym.



Ucząc się SQL pozyskujesz wiedzę jak wydobyć dane, agregować dane i dostarczyć je odbiorcy/zamawiającemu. Marcinie Twoja rola jako dostawcy danych to całkiem ciekawe zajęcie, robisz raporty takie jak sobie ktoś zażyczy, zasilasz system danymi biorąc je z innego źródła, wspierasz decydujących materiałem do analizy i następnie podjęcia decyzji. Do migracji danych też się przydaje znajomość SQL, ale ile to razy się migrujesz, nie za często chyba :-)



W ostatnim zdaniu padło słowo „analiza”. Czy masz ambicje bycia też analitykiem? Marcinie czuję, że po zdobyciu podstaw SQL zaciekawił Ciebie aspekt analizy. Wyraźnie Twoje ostatnie pytania to już pytania z tego obszaru.



Zatem musisz wiedzieć, iż homo sapiens w zasadzie nie ma intuicji statystycznej, osądy problemów dotykających prawdopodobieństwa są dokonywane przez człowieka najczęściej z bardzo dużym błędem. Po prostu człowiekowi umiejętność szacowania statystycznego nie była potrzebna do przeżycia, to jej prawie nie ma, paroma prostymi komunikatami można u człowieka zbudować wrażenie występowania dużego problemu podczas gdy go nie ma, ale to wychodzi dopiero z danych.



Jeżeli chcesz być też analitykiem to musisz przeczytać książkę, która mym zdaniem zasługuje na miano „biblii analityków”.  Ma tylko jedną wadę, jest nieco długa, bo autor nie tylko opisał błędy, ale jest dość dużo wątków autobiograficznych. No cóż taka cena otrzymania dorobku noblisty Daniela Kahnemana w jednej książce.



Książka jest stosunkowo tania jak na ogromną dawkę wiedzy jaką gwarantuje. Pokuszę się o stwierdzenie, iż w dzisiejszych czasach analityk, chcąc zasłużyć na to miano: musi ja mieć J oraz przede wszystkim przeczytać.





Pułapki myślenia. O myśleniu szybkim i wolnym



Jak na podstawie kodów pocztowych przypisać klientom województwo?



Zadanie: mamy adresy i kody pocztowe siedzib klientów, ale nie mamy określonego województwa. Jak uzupełnić tę informację? Od razu czujesz Marcinie, iż trzeba wykorzystać kody pocztowe? To prawda, ale skąd wziąć bazę kodów wraz z informacją o województwie oraz czy nie będzie to duża tabelka?

Okazuję się, iż wystarczy tabelka z 157 wpisami by dość dobrze temat opracować. Podkreślam, trzeba do tego wykorzystać tabelę w EXCEL lub w bazie jako słownik: maska kodu w jednym polu a w drugim województwo przypisane do maski.

I teraz na przykładzie: mam 200 klientów, znam ich kody pocztowe i przypisuję województwa: w EXCEL wykorzystuję funkcję: WYSZUKAJ.PIONOWO (jak na obrazku). Czyli chcę by w określonym miejscu, dla danego klienta wyświetliło się województwo jako:


=WYSZUKAJ.PIONOWO ( B2 ; przypisanie_kodow!$A$1:$B$157 ; 2 )

Gdzie:
  • B2 – to adres komórki gdzie jest kod pocztowy danego klienta;
  • przypisanie_kodow!$A$1:$B$157 – to lokalizacja tabeli z danymi: maska kodu i województwo, jak widać mam to w osobnej zakładce, którą nazwałem przypisanie_kodow a zakres tabeli jest w tej tabeli dokładnie $A$1:$B$157. Użyłem przed adresem znaku dolara ($) ponieważ chcę by przy kopiowaniu komórki i wklejaniu adres tabeli danych się nie zmieniał;
  • 2 – to wskazanie z którego pola tabeli przypisania kodów ma zostać zwrócona wartość, tu z drugiego pola, bo w drugim jest po prostu dla danej maski kodu pocztowego określone województwo.
W EXCEL na tym kończę, domyślnie EXCEL zwróci wartość podobną, czyli weźmie nasz kod i wybierze podobną maskę do naszego kodu, jeżeli dodać po średniku FAŁSZ, to musiałoby nastąpić dokładne dopasowanie. Nasza tabela przypisanie_kodow nie pozwala na dokładne dopasowanie, ale działa.


Wykonanie zadania na bazie sprowadza się do tego samego ciągu czynności, tabelka przypisanie kodów musi być ma bazie, później wiążemy po kodzie, przy czym połączenie na bazie tu musi być wykonane z wykorzystaniem operatora „like”.  Złączenie tabel na bazie można robić wykorzystując operator „like”, zaskoczeni?
Polecam zatem przejrzenie materiałów dostępnych poniżej: 


- zadanie wykonane na bazie, przy czym istotna uwaga, inaczej tworzę tabele na ORACLE, inaczej na MS SQL Serwerze, uruchamiając kod zwróć Marcinie na to uwagę :-)



W. 





Dual na SQL Serwerze ? Tworzenie tabeli poprzez zapisanie do niej wyniku selecta?



To porównanie SQL Serwera z Oracle.
Przygotowywałem materiał na kolejny wpis, ale już działający, uruchamiany na SQL Serwerze i chciałem wykorzystać możliwość utworzenia tabel nie poprzez nazwy pól i definicje typów danych, ale poprzez zapisanie wyniku „selecta” jako tabeli.
Na ORACLE konieczne jest wybranie przykładowych danych oraz musi być zachowana struktura select …. from nazwa_tabeli;
To na czerwonym musi być, dlatego wykorzystuje się tabelę dual mającą jedną wartość i działa, czyli stosuje się chwyt:
create table przyklad
 as select
 23 liczba
 , 'Platynowa' ulica
from dual;
Taki prosty chwyt powoduje, iż powstaje tabela w tym przypadku nazwana przyklad, ma dwa pola: liczba, ulica, jest od razu jeden rekord danych – wartości: 23, Platynowa. I jest to mym zdaniem intuicyjne. Po prostu widać, iż tworzymy tabelę a do niej ładujemy dane, jeden rekord.
Na SQL Serwerze ten sam efekt uzyskamy ale tak:
select
 23 liczba
 , 'Platynowa' ulica
 into  przyklad;
Tak, powstanie tabela przyklad, ale można się nieco być zaskoczonym, no nie? Na obrazku widać, iż zadziałało J
A dual jest też zbędny na SQL Serwerze:
select 1 liczba;
zostanie wykonane, from tabela jest zbędne, co widać na drugim obrazku.
A już w najbliższy weekend nieco bardziej złożona sprawa będzie przedstawiona.
Pozdrawiam,
W