• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyjaśnienie kodu SQL

Object Storage Arubacloud
+2 głosów
176 wizyt
pytanie zadane 11 lutego 2023 w SQL, bazy danych przez Blds Użytkownik (830 p.)

Czy ktoś może mi wytłumaczyć jak działa poniższy kod. Do tej pory case uzywałęm na zasadzie

case when col1 = 1 then 1 

else 2

end as numer

tutaj mamy warunek, then kolumna =  jakiś parametr, zakonczone end bez nazwania kolumny kolejne dwa warunki i dopiero co ma się pojawić w kolumnie i end i nazwa kolumny. Nie rozumiem właśnie działania tej pierwszej części...

select when exists(select 1
                             from sell as s
                             where s.customer_id = cs.customer_id
                               and case
                                       when cs.sub_id = 1 then service = 14
                                       when cs.sub_id = 2 then service = 13
                                       when cs.sub_id = 3 then service = 144
                                       when cs.sub_id = 4 then service = 18
                                       when cs.sub_id = 5 then service = 152
                                       when cs.sub_id = 6 then service = 155
                                       when cs.sub_id = 7 then service = 16
                                 end
                               and date_at >= cs.created - interval 1 month
                               and date_at < cs.created)
                     then 'premium'
                 else 'VIP'
                 end as typ

 

1 odpowiedź

+3 głosów
odpowiedź 11 lutego 2023 przez Wiciorny Ekspert (269,710 p.)
edycja 11 lutego 2023 przez Wiciorny

Cały SQL odpowiada za określenie wartości w kolumnie "typ". Instrukcja "case" służy tu do określania warunków.
artość kolumny "typ" jest określana na podstawie warunku sprawdzającego, czy istnieje rekord w tabeli "sell" spełniający pewne kryteria które są dalej opisane.

Instrukcja "case" jest używana w warunku, aby określić, jakie wartości powinny być spełnione w kolumnie "service" dla różnych wartości w kolumnie "sub_id" w tabeli "cs". Na przykład, jeśli wartość w kolumnie "sub_id" wynosi 1, to warunek musi być spełniony  i następuje wykonanie instrukcji n service = 14. co oznacza że wartość kolumny service zostaje ustawiona na wartość 14 

Chociaż nie wiem co to jest za forma zapisania, bo z tego co wiem, to po warunku nie może być przypisania tak jak zostało to określone, chyba że zamiast then wprowadzisz or.

Wartość kolumny "typ" jest ostatecznie określana na podstawie wyniku tego warunku i jest nazwana na końcu instrukcji "case" przy użyciu słowa kluczowego "as" i nazwy "typ".

Generalnie dokładniejsze case wyglądało by tak 
 

select case 
         when cs.sub_id = 1 then service = 14
         when cs.sub_id = 2 then service = 13
         when cs.sub_id = 3 then service = 144
         when cs.sub_id = 4 then service = 18
         when cs.sub_id = 5 then service = 152
         when cs.sub_id = 6 then service = 155
         when cs.sub_id = 7 then service = 16
       end as service_type

W tym przykładzie, dla każdego wiersza w tabeli "cs", wartość kolumny "service_type" jest ustawiana na różne wartości w zależności od wartości kolumny "cs.sub_id". Gdy "cs.sub_id" jest równe 1, wartość "service_type" jest ustawiana na 14, a gdy "cs.sub_id" jest równe 2, wartość "service_type" jest ustawiana na 13, itd.

komentarz 12 lutego 2023 przez Blds Użytkownik (830 p.)

Gdy "cs.sub_id" jest równe 1, wartość "service_type" jest ustawiana na 14, a gdy "cs.sub_id" jest równe 2, wartość "service_type" jest ustawiana na 13, itd.

czy to znaczy ze w bazie danych nastąpi taka zmiana? Nie spotkałem się wcześniej z takim zapisem. Pierwsza cześć jest zakończona endem, ale bez określenia kolumny i dodane dwa kolejne warunki dotyczące daty i dopiero nazwa stałej, która znajdzie się w kolumnie i nazwanie kolumny

komentarz 12 lutego 2023 przez Wiciorny Ekspert (269,710 p.)
Nie, to nie znaczy, że w bazie danych nastąpi taka zmiana. Zapytanie SQL, które widzisz powyżej jest jedynie instrukcją wyświetlenia danych, a nie modyfikacją danych w bazie. W takim zapytaniu nie jest możliwe przypisanie wartości do kolumny w tabeli. Zapytanie jest wykonywane na istniejących danych i służy do przekształcania ich i prezentowania w określonej formie.

To  przypisanie może mieć wpływ np w  zapytaniu na dalsze kalkulacje, czy określanie warunków w danym selekcie, albo na sam wynik zapytania SELECT

Podobne pytania

0 głosów
0 odpowiedzi 99 wizyt
pytanie zadane 17 stycznia 2018 w SQL, bazy danych przez lukas125 Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 498 wizyt
pytanie zadane 24 lutego 2020 w Nasze poradniki przez oracledev Użytkownik (620 p.)
0 głosów
1 odpowiedź 198 wizyt
pytanie zadane 5 lutego 2019 w PHP przez Dr. Zawijas Użytkownik (610 p.)

92,555 zapytań

141,402 odpowiedzi

319,543 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...