Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc

[PL] Konkurs "Co to za query" - finał

Voila! Szczęśliwie dotarliśmy do końca konkursu "Co to za query". To była przednia zabawa, przyznaję. Układanie zadań było dla mnie sporą frajdą i wyzwaniem zarazem. Wy – uczestnicy, spisaliście się na medal. Tak, wiem, że trzeci etap konkursu pewnie był najłatwiejszy, ale sam fakt, że większość zawodników ugrała w nim 70 punktów (max), mówi chyba coś więcej. Po prostu wpadliście we właściwy rytm i sądzę, że każdy następny etap byłby dla większości z Was prosty ;-)

Chylę czoła przed wszystkimi uczestnikami konkursu. Każdy z Was ma u mnie "szacun += 10" :-)

TOP 10

Pora na listę najlepszych dziesięciu zawodników. Gratuluję każdemu z osobna. Dobra robota, Panowie!

Miejsce Nr uczestnika Imię i nazwisko Punkty Czas (dni) *
1 5 Tomek Przeliorz 210 4,25
2 3 Marek Powichrowski 210 4,50
3 12 Jakub Plusczok 190 11,62
4 2 Michał Krużel 185 1,32
5 13 Krzysztof Bąk 185 17,61
6 16 Artur Stanaszek 185 20,78
7 10 Leonard Górowski 175 17,52
8 11 Marek Konitz 170 15,56
9 4 Paweł Baranowski 165 10,31
10 7 Ryszard Adamczyk 150 8,16

* Czas w dniach będący różnicą między danym uczestnikiem a uczestnikiem, który najszybciej nadesłał odpowiedzi do etapu

Odpowiedzi do zadań z 1. etapu

Zadanie 1 - "Podatki w US a w Polsce"

Opis: Które stawki VAT z tych znanych w Polsce, są w US :-) Co ciekawe, wynik nie jest w procentach :D

Kod:

SELECT DISTINCT TaxRate
FROM Sales.SalesTaxRate
WHERE TaxRate IN (0, 7, 22)

Komentarz:

W zasadzie jedyny błąd, jaki można było zrobić, polegał na pominięciu słowa DISTINCT. Na tym poległa jedna osoba. Cała reszta poradziła sobie. Jeden zawodnik ominął DISTINCT, ale nadrobił GROUP BY (też jest ok) :-) W planach zauważalna jest cicha i bezśladowa konwersja wartości 0, 7 i 22 na typ smallmoney (takiego typu jest kolumna TaxRate).

Zadanie 2 - "Your Vista Has Expired"

Opis: Numery i daty wygasania kart Vista (?).

Kod:

SELECT 
CardNumber,
CAST(ExpYear AS char(4)) + '-' +
RIGHT('00' + CAST(ExpMonth AS varchar(2)),2) AS Expiration
FROM Sales.CreditCard
WHERE CardType = 'Vista'

Komentarz: Proste zapytanie, w którym chciałem pokazać dwie rzeczy – zastępowalność CAST funkcją CONVERT oraz cichą i bezszelestną konwersję literału 'Vista' do typu nvarchar. Nie było chyba osoby, która by zawaliła to zadanie.

Zadanie 3 - "Size and color matter"

Opis: Ilość produktów wg kolorów i rozmiarów.

Kod:

SELECT 
COALESCE(Color, '<Unknown>') AS Color,
COALESCE(Size, '<Unknown>') AS Size,
COUNT(*) AS Cnt
FROM Production.Product
GROUP BY GROUPING SETS ((Color, Size), (Color))
ORDER BY Color, Size

Komentarz: Dałem tu za dużą dowolność :-) Miało być pokazanie nowej funkcjonalności GROUPING SETS, a wyszło, że można było użyć operatorów ROLLUP lub CUBE i też plan był identyczny. Jeden zawodnik użył GROUPING SETS, za co mu chwała, bo przy dodaniu jeszcze jednej kolumny do listy kolumn wybieranych raczej już nie dałoby się uniknąć użycia tej właśnie nowinki z SQL Server 2008. Nie mieliście z tym zadaniem problemów.

Zadanie 4 - "Ostatnie zamówienia"

Opis: Dwa ostatnio dokonane zamówienia dla każdego klienta.

Kod:

;WITH CTE AS (
SELECT
CustomerID,
SalesOrderID,
DENSE_RANK() OVER(PARTITION BY CustomerID ORDER BY OrderDate DESC) AS n
FROM Sales.SalesOrderHeader
)
SELECT CustomerID, SalesOrderID
FROM CTE
WHERE n < 3
ORDER BY CustomerID, SalesOrderID

Komentarz: To miało być zadanie na użycie funkcji rankingu. Z DENSE_RANK poradziliście sobie dość dobrze. Chociaż zdarzyło się, że ktoś umieścił CustomerID w klauzuli ORDER BY zamiast w PARTITION BY, co diametralnie zmieniało i plan, i wynik zapytania. Zamiast CTE (chciałem być "fancy" ;-)) spokojnie można było użyć podzapytania. W podzapytaniu na liście wybieranych kolumn mogło pojawić się OrderDate i plan się nie zmieniał. Mała uwaga do jednego z uczestników: unikałbym nadawania kolumnom aliasów będących nazwami funkcji (RANK).

Post mortem

Mam nadzieję, że konkurs przypadł Wam do gustu. Może nie był to majstersztyk na miarę quizów organizowanych z wielkim rozmachem dla tysięcy uczestników i z nagrodami w stylu XBox 360, ale taki miałem budżet (blah, nie lubię tego słowa) :-) Niemniej jednak bardzo cieszy, że są zapaleńcy, którzy chętnie biorą udział w takiej zabawie. Jak tylko będę miał możliwość (czytaj – jak będę dysponował nagrodami), znów coś wymyślę :-) Zachęcam też Was do organizowania własnych konkursów na blogach czy w ramach portali WSS i CodeGuru. Chętnie pomogę w organizacji i wezmę udział w ciekawym przedsięwzięciu (także jako uczestnik, a co!).

Na koniec trochę statystyk:

  • w konkursie wzięło udział 18 zawodników,
  • 15 zawodników nadesłało rozwiązania zadań we wszystkich etapach,
  • średnie ilości punktów z etapów: [1] – 41,1, [2] – 41,1, [3] – 55,2,
  • w konkursie nie wziął udziału żaden SQL MVP ;-),
  • najszybsza odpowiedź na jeden etap – 8h 25min (etap 1, zawodnik nr 1),
  • odpowiedź najbardziej "last minute" – poniedziałek, 18 czerwca, godz. 23:55 (zawodnik nr 13 w etapie 1).

That’s all folks! Jeszcze raz dzięki za pyszną zabawę i do następnego takiego (lepszego!) konkursu :-)

PS. Nagrody powoli będą docierały do zawodników z TOP 10. Czekajcie na kuriera ;-)

Opublikowane 3 czerwca 2009 08:05 przez brejk

Komentarze:

# re: [PL] Konkurs "Co to za query" - finał

3 czerwca 2009 09:49 by arkadiusz.wasniewski

Pawle. Naprawdę gratuluję pomysłu.

Arek

# re: [PL] Konkurs "Co to za query" - finał

3 czerwca 2009 16:03 by lk-net_leszek

Pawle - rozumiem, że pełna lista będzie gdzieś do wglądu?

TOP 10 się nie załapałem... ale TOP 18 to na pewno!

A w szczególności chodzi mi o wynik 30 etapu. Coś mi się widzi, że max(punkty) raczej się nie udało zdobyć w tym etapie - ale .... myslę, że jutro się wszystkiego dowiem.

# re: [PL] Konkurs "Co to za query" - finał

3 czerwca 2009 20:02 by brejk

@Leszek: Tak, udzielam informacji wedle życzenia :-)

# re: [PL] Konkurs "Co to za query" - finał

3 czerwca 2009 22:29 by Dalian

Paweł!

Świetny konkurs. Poproszę i pożądam pełnej listy - na top ten się nie załapałem.

Przypominam, że obiecałeś "artykulik" o XML.

Pozdrawiam.

Paweł

# re: [PL] Konkurs "Co to za query" - finał

3 czerwca 2009 22:56 by brejk

Ok, informacje dla Leszka i Daliana:

Leszek - miejsce 16., 75 punktów

Dalian - miejsce 14., 105 punktów

W sumie nie tak źle chłopaki ;-)

PS. Artykulik o XML to może jakoś w wakacje.

# re: [PL] Konkurs "Co to za query" - finał

4 czerwca 2009 09:51 by lk-net_leszek

@brejk: Dzięki za info.... Wbijam się na chwilę w dumę osobistą.

# re: [PL] Konkurs "Co to za query" - finał

4 czerwca 2009 13:08 by stygmat

Gratulacje dla uczestników za wytrwałość ;)

oraz dla Pawła za świetny pomysł i super organizacje.

# Ach, co to było za query!

5 czerwca 2009 22:55 by dev2dev

Jako uczestnik turnieju &quot;Co to za query?&quot; chciałem Ci Paweł pogratulować pomysłu. To była świetna

# [PL] AD MMIX – podsumowanie

23 grudnia 2009 09:12 by SQLGEEK

Kończy się rok 2009. Jak co roku postanowiłem więc podsumować te ostatnie trzysta parę dni i zdradzić

Komentarze anonimowe wyłączone

About brejk

MVP, MCT, SQL Server geek