Język SQL - czym to jeść
Okienko “Język SQL” daje bezpośredni dostęp do danych przechowywanych przez program. Nie jest to najprostsza rzecz dla laików i przed wykonaniem operacji modyfikujących bazę danych sugeruję zrobienie kopii bezpieczeństwa.
Poniżej opisuję jak zbudowane są dane i co można w ten sposób zrobić.
Jeśli masz gotowe, praktyczne przykłady i chcesz się nimi podzielić przyślij mi zapytanie emailem.
Jeśli potrzebujesz jakieś proste zestawienie daj znać. Pewnie uda się je zrobić :-)
Z grubsza – o co chodzi
Każde z kont programu Asystent posiada własną grupę tabel na których operuje. Nazwy tych tabel zaczynąją się od nazwy użytkownika programu. Czyli….
Jeśli przy wchodzeniu do programu w okienku logowania wybierasz “stefan” to wszystkie tabele zawierające dane tego konta będą zaczynać się od “stefan”. Np. stefan_auctions, stefan_transactions, stefan_wplata, itp.
W okienku działają typowe polecenia SQL: select, desc, truncate, delete, update..
Można w ten wyeksportować z programu niemal wszystkie dane, usunąć historię itp.
Poniżej kilka najpopularniejszych przykładów.
Jak używać przykładów
Ciąg znaków “SNICK” należy zastąpić nazwą użytkownika programu. Poprawione zapytanie wklejamy w dolnym okienku “Języka SQL”. ( jeśli nie wiesz jak wkleić czytaj tutaj ). Po poprawnym wklejeniu naciśnij “wykonaj”. Jeśli wszystko zrobiłeś poprawnie wynik zapytania zobaczysz w górnym okienku. Możesz go teraz zapisać do pliku przez “eksport do csv”.
Przykłady:
Obroty w poszczególnych dniach:
select left(date,10) DATA, round(sum(amount),2) KWOTA,count( * ) ILOSC from SNICK_transactions group by left(date,10) order by left(date,10)
Obroty i aktywność klientów
select user_login KLIENT, round(sum(amount * quantity),2) WARTOSC, sum(quantity) ILOSC, left(min(date),10) START, left(max(date),10) KONIEC from SNICK_transactions group by user_login order by wartosc desc, ilosc desc
Transakcje nieopłacone
select user_login, round(sum(amount),2) KWOTA, count( * ) ILOSC from SNICK_transactions where wplata=0 and archiwum=0 group by user_login order by kwota desc;
Emaile wszystkich klientów
select contact_email from SNICK_contacts;
Emaile wszystkich, którzy wystawili nam pozytywa
select distinct contact_email from SNICK_contacts c, SNICK_komentarze_otrzymane ko
where c.contact_user_id=ko.user_id_rcvd
and ko.type_of_feedback=1 order by contact_email;
Towary wysłane w zadanym okresie.
Datami można się dowolnie bawić. Przydatne jeśli z opóźnieniem zacząłeś robić remanent na koniec roku. :) Daty w zapytaniu można dowolnie zmieniać.
select rt.user_login, rt.quantity, rt.date data_sp, rw.date data_wys, rt.auction_nr from SNICK_transactions rt, SNICK_wysylka rw where rt.uniquekey=rw.uniquekey and
==left(rw.date,10)>=“2008-01-01”== and
==left(rw.date,10)<=“2008-01-09”==
Najwięksi klienci w zadanym okresie
Daty w zapytaniu można dowolnie zmieniać.
select user_login, round(sum(quantity * amount),2) wartosc, sum(quantity) ilosc from SNICK_transactions where
==left(date,10)>=“2006-01-01”== and
==left(date,10)<=“2008-03-10”==
group by user_login
order by wartosc desc, ilosc desc
Dzienny raport sprzedaży
Raport grupuje dane po numerze aukcji i pozauje precyzyjnie sprzedaż w danym dniu.
select left(t.date,10) data, a.tytul,t.auction_nr, sum(t.quantity) ilosc, t.amount cena, round(t.amount * sum(t.quantity),2) wartosc from SNICK_transactions as t, SNICK_auctions as a where ==t.auction_nr=a.auction_nr and left(t.date,10)=“2008-03-20”== group by t.auction_nr order by wartosc desc, ilosc desc
podział na rodzaj wysyłki w zadanym okresie
select forma, count( * ) ilosc from SNICK_wysylka
where ==date>=“2008-01-01”== and ==date<=“2008-02-01”==
group by forma order by ilosc desc
Raport ze sprzedaży w okresie
SELECT left( tr.date, 10 )
DATA , tr.user_login, au.tytul, tr.quantity ilosc, tr.amount cena, tr.amount * tr.quantity wartosc, left(wy.date,10) DATA_WYS, wy.forma WYSYLKA, wp.forma WPLATA
FROM (SNICK_transactions as tr, SNICK_auctions as au)
LEFT JOIN SNICK_wysylka AS wy ON wy.uniquekey = tr.uniquekey
LEFT JOIN SNICK_wplata AS wp ON wp.uniquekey = tr.uniquekey
WHERE ==left(tr.date,10)>=“2008-08-01”==
AND ==left(tr.date, 10)<= “2008-10-31”==
AND tr.auction_nr = au.auction_nr
ORDER BY left( tr.date, 10 ) , user_login
Poniżej ekran prawidłowo wykonanego zapytania.



