Wpis z mikrobloga

Mirki, dlaczego po FROM muszę tu mieć "AS a"? Bez tego query wywala błąd. Do tego CASE WHEN nie obsługuje mi NULL ( ͡° ʖ̯ ͡°) #sql #pytaniedoeksperta #kiciochpyta

SELECT rok_urodzenia, SUM(liczba_dluznikow) AS liczba_dluznikow
FROM (
SELECT
CASE WHEN dl_pesel = '' THEN 'BRAK' WHEN dl_pesel = NULL THEN 'BRAK' ELSE LEFT(dl_pesel, 2) END as rok_urodzenia,
1 as liczba_dluznikow
FROM table
) AS a
GROUP BY rok_urodzenia
ORDER BY 2 desc
  • 16
@lsieko12 jak nie korzystasz z tabeli to jej nie wybieraj, z tej korzystasz a własnej nazwy ona nie ma. Po numerze nie rób bo jak ktoś doda kolumnę na drugiej pozycji to się sypnie sortowanie a tego byśmy nie chcieli
@lsieko12:
Prawdę mówiąc to tego podzapytania też nie potrzebujesz, możesz to samo osiągnąć pobierając dane bezpośrednio z tabeli :)

A tak z takich jeszcze innych rzeczy, już nie związanych stricte z SQL a bardziej rozumieniem danych.

Sposób na pobieranie roku urodzenia dłużnika przy starych ludziach/długiej historii będzie niewiarygodny. ( ͡° ͜ʖ ͡°)
@DarkAlchemy właśnie na tych danych uczę się SQL, więc chyba muszę przejść po kolei przez wszystkie etapy.
Jeśli te moje querisy kiedykolwiek wejdą na produkcję, to będzie sukces
@lsieko12: to tutaj jak ja bym to napisał, możesz zerknąć i jakby co to pytaj dlaczego tak a nie inaczej (pisałem pod MS SQL)

SELECT
CASE WHEN ISNULL(dl_pesel,'') = '' THEN 'BRAK' ELSE LEFT(dl_pesel, 2) END as rok_urodzenia,
COUNT(1) as liczba_dluznikow
FROM
tabele
GROUP BY
CASE WHEN ISNULL(dl_pesel,'') = '' THEN 'BRAK' ELSE LEFT(dl_pesel, 2) END
ORDER BY
liczba_dluznikow DESC

A co do roku to wiesz w czym problem? ( ͡
@DarkAlchemy: Ok, chyba rozumiem. Można wrzucić obliczenia bezpośrednio w elementy pobierające dane z tabeli (nie wiem, czy to dobre słownictwo), zamiast wykonywać je w podzapytaniach i tworzyć niepotrzebne tabele/kolumny.

Co do roku urodzenia, dwie pierwsze cyfry z peselu będą się powtarzać dla 1900 i 2000 lat. Z tego co kojarzę pesele osób urodzonych po 2000 są jakieś inne (dłuższe), więc pewnie będzie można to jakoś sprawdzić kodem i jakoś elegancko to
@lsieko12: dokładnie, operacje na danych możesz robić od razu i od razu ich użyć do grupowania czy warunków (ale nie zawsze, są wyjątki, które wymagają użycia podzapytania).

I co do PESEL też dobrze, chociaż nie są dłuższe :) Po prostu dodawane jest do miesiąca 20, więc wystarczy sprawdzać 3 cyfrę. Jeśli jest 0 lub 1 to 1900-1999, jeśli 2 lub 3 to 2000-2099, 4 lub 5 to 2100-2199 a 6 lub
AS z reguly jest opcjonalnym slowem kluczowym i mozna je pominac (ale reszte trzeba napisac) np.

count(1) licznik -- licznik bedzie nazwa kolumny
albo from (select top 10 id_przedmiot, nazwa from przedmioty order by cena desc) s -- s nazwa tabeli

najlepiej spojrzec w dokumentacje silnika bazodanowego.