» »

[SQL] Izbira po različnih kriterijih...

[SQL] Izbira po različnih kriterijih...

MrStein ::

Kako oblikovati query, da izbere iz vsake skupine po določeni lastnosti, če pa takih ni, po drugi lastnosti/pogoju?

Primer:
Imamo tabelo oseb.
Vsaka oseba ima naslov/stanovanje.
Vsaka oseba ima nič ali več avtomobilov.
Ima tudi nič ali več koles.
Lahko je invalid (v smislu prevoza).

Kako bi naredil SELECT, da vrne za vsak naslov spisek oseb, ki imajo avtomobil, razen če v hiši ni nobenega z avtomobilom, potem naj vrne tiste, ki imajo kolo, če niti takih ni, pa spisek "pešcev". (predpostavimo, da se lastnosti ne prekrivajo, torej če ima nekdo avto, nima kolesa niti ni nepokreten itd.)

Konkretno:
Na naslovu A živjo:
Franc - ima atomobil
Jože - ima avtomobil
Andrej - ima kolo
Robert - nima prevoznega sredstva (pešec)

Na naslovu B živijo:
Pavel - nima prevoznega sredstva (pešec)
Albin - ima kolo
Lojze - nepokreten

Na naslovu C živi, Tomaž, nepokreten

Na naslovu D ne živi noben. (recimo da imamo tabelo naslovov, od katerih so nekateri "neposeljeni")

Torej rezultat bi naj bil:
Naslov A, Franc
Naslov A, Jože
Naslov A, Albin
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

darkolord ::

Načinov je več.

- več selectov
- lahko uporabiš IF/ELSE.
- lahko recimo pogrupiraš osebe po naslovu in prevoznem sredstvu (ustrezno sortirano) in uporabiš samo prvo grupo za vsak naslov
- lahko kriterije ustrezno utežiš (npr. peš = 1, kolo = 2, avto = 3), potem pa za vsak naslov poiščeš MAX() tega polja in selectaš samo osebe ki imajo enako vrednost
- ...

MrStein ::

darkolord je izjavil:


- lahko kriterije ustrezno utežiš (npr. peš = 1, kolo = 2, avto = 3), potem pa za vsak naslov poiščeš MAX() tega polja in selectaš samo osebe ki imajo enako vrednost

Točno to zadnjo možnost sem uporabil.
Izbira MAX-a pa po vzoru http://stackoverflow.com/a/7262473/8228...

Ker zgleda precej klobasasto me zanima, če obstaja kaj elegantnejšega.

Aja, gre se za Oracle.
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

Rokm ::

Ce imas v tabeli podatek o temu kaj je kdo po statusu najprej pogledas najboljsi status v hisi in potem izberes vse s tem statusom.
Nekako takole http://sqlfiddle.com/#!2/249fd9/1.

Ce pa imas lastnistvo avtomobilov/koles in invalidnost v drugi tabeli pa bos se rabil en dodaten query s par if-i.

Edit: tudi ce v editorju vstavim povezavo noce pravilno naredit linka, ocitno bo treba le skopirati

Zgodovina sprememb…

  • spremenil: Rokm ()

MrStein ::

Kake IF-e omenjate? SQL ne pozna IF-ov.
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

Rokm ::

Se opravicujem, IF uporabljam iz navade. SQL ima CASE strukturo, ki opravi tudi delo IF-a.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Kolesarska steza je za kolesa! (strani: 1 2 3 )

Oddelek: Na cesti
14222499 (15326) zmaugy
»

24 ur anketa: Ali zagovarjate prepoved elektičnih skirojev? (strani: 1 2 3 4 5 )

Oddelek: Loža
22837606 (33484) c3p0
»

Nesreča dveh kolesarjev (strani: 1 2 3 4 )

Oddelek: Loža
19834616 (29273) joze67
»

S skejtanjem "motim javni mir in red" (strani: 1 2 3 )

Oddelek: Loža
11820095 (16078) Jerry000
»

Vpliv družbenih arhetipov na percepcijo tveganja v prometu (strani: 1 2 3 4 )

Oddelek: Na cesti
16239844 (38033) BlueRunner

Več podobnih tem