PostgreSQL CASE

Summary: tässä opetusohjelmassa opit käyttämään PostgreSQL CASE-ehdollista lauseketta ehdollisten kyselyjen muodostamiseen.

PostgreSQL CASE lauseke on sama kuin IF/ELSE lauseke muissakin ohjelmointikielissä. Sen avulla voit lisätä if-else-logiikan kyselyyn muodostaaksesi tehokkaan kyselyn.

koska CASE on lauseke, sitä voi käyttää missä tahansa paikassa, jossa lauseketta voidaan käyttää esim.,SELECT, WHERE, GROUP BY, ja HAVING lauseke.

CASE ilmaisulla on kaksi muotoa: yleinen ja yksinkertainen muoto.

1) Yleinen PostgreSQL-TAPAUSLAUSEKE

seuraava havainnollistaa CASE lausekkeen yleistä muotoa:

Code language: SQL (Structured Query Language) (sql)

tässä syntaksissa jokainen ehto (condition_1, condition_2…) on Boolen lauseke, joka palauttaa joko true tai false.

kun tila arvioidaan tasolle false, CASE lauseke arvioi seuraavan tilan ylhäältä alas, kunnes se löytää tilan, joka arvioi arvoksi true.

jos ehto arvioidaan arvoon true, CASE lauseke palauttaa vastaavan tuloksen, joka seuraa ehtoa. Esimerkiksi jos condition_2 arvioi arvoon true, CASE lauseke palauttaa arvon result_2. Se myös lopettaa välittömästi seuraavan ilmaisun arvioimisen.

jos kaikki ehdot arvioidaan arvoon false, CASE lauseke palauttaa tuloksen (else_result), joka seuraa ELSE hakusanaa. Jos ELSE – lausekkeen jättää pois, CASE lauseke palauttaa NULL.

Katsotaanpa film taulukkoa otostietokannasta.

a) yleinen tapausesimerkki

Oletetaan, että Elokuvat halutaan merkitä niiden pituuden mukaan seuraavan logiikan perusteella:

  • jos elokuvan pituus on alle 50 minuuttia, elokuva on lyhyt.
  • jos filmin pituus on yli 50 minuuttia ja enintään 120 minuuttia, se on keskikokoinen.
  • jos pituus on yli 120 minuuttia, elokuva on pitkä.

tämän logiikan soveltamiseksi voit käyttää CASE lauseketta SELECT lausekkeessa seuraavasti:

Code language: PHP (php)

tuloste:

huomaa, että asetimme CASE – lausekkeen jälkeen sarakenimen duration.

B) käyttämällä casea, jossa on aggregaattifunktioesimerkki

Oletetaan, että haluat määrittää hintasegmentit elokuville seuraavalla logiikalla:

  • jos vuokraprosentti on 0,99, elokuva on taloudellinen.
  • jos vuokrausaste on 1,99, elokuva on massaltaan.
  • jos vuokraprosentti on 4,99, elokuva on premium.

ja haluat tietää, kuinka monta elokuvaa kuuluu talouteen, massaan ja Premiumiin.

tässä tapauksessa voit käyttää CASE lauseketta kyselyn konstruoimiseksi seuraavasti:

Code language: SQL (Structured Query Language) (sql)

kyselyn tulos on seuraava:

tässä esimerkissä käytimme CASE – ilmaisua palauttaaksemme 1 tai 0, jos vuokrataso laskee kuhunkin hintasegmenttiin. Ja sovellimme SUM funktiota laskeaksemme filmien kokonaismäärän kullekin hintasegmentille.

2) Yksinkertainen PostgreSQL-lauseke

PostgreSQL tarjoaa CASE – lausekkeen toisen muodon, jota kutsutaan yksinkertaiseksi muodoksi seuraavasti:

Code language: SQL (Structured Query Language) (sql)

CASE ensimmäinen arvioi expression ja vertaa tulosta jokaiseen arvoon( value_1, value_2, …) WHEN lausekkeissa peräkkäin, kunnes se löytää ottelun.

kun expression tulos on yhtä suuri kuin arvo (arvo1, arvo2 jne.) WHEN lausekkeessa CASE palauttaa vastaavan tuloksen THEN lausekkeessa.

jos CASE ei löydä osumia, se palauttaa else_result , joka seuraa ELSE, tai NULL arvoa, jos ELSE ei ole saatavilla.

a) Yksinkertainen PostgreSQL-TAPAUSLAUSEKE esimerkki

seuraava lauseke käyttää CASE – lauseketta luokituksen kuvauksen lisäämiseksi tulosteeseen:

Code language: PHP (php)

tässä esimerkissä käytimme yksinkertaista CASE lauseketta verrataksemme film-taulukon luokitusta joihinkin kirjaimellisiin arvoihin, kuten G, PG, NC17, PG-13, ja palauttaaksemme vastaavan luokituksen kuvauksen.

B) käyttämällä yksinkertaista PostgreSQL-TAPAUSLAUSEKETTA, jossa on aggregaattifunktioesimerkki

seuraava lauseke käyttää CASE lauseketta, jossa on SUM funktio, laskeakseen filmien määrän kussakin luokituksessa:

Code language: PHP (php)

tässä opetusohjelmassa olet oppinut käyttämään PostgreSQL CASE – lauseketta monimutkaisten kyselyiden muodostamiseen.

  • oliko tästä opetuksesta apua ?
  • YesNo

Vastaa

Sähköpostiosoitettasi ei julkaista.