Forum » Programiranje » SQL poizvedba
SQL poizvedba
xsenon ::
pozdravljeni,
želim narediti avtomatsko generiranje telefonskega cenika. Vse cene za posamezno destinacijo imam vpisane v bazi, vendar pa mi oblika zapisa v bazi ne ustreza glede na željeno obliko telefonskega imenika. ZA lažje razumevanje kaj želim narediti sem prilepil sliko. Sem že poskušal zadevo narediti z dvojno pizvedbo in zapisom v novo tabelo vendar se mi to ne zdi najbolj smotrno. Kot prvo me zanima ali je takšna poizvedba kot je predvidena na spodnji sliki sploh mogoča, in če je bi prosil za pomoč ali vsaj namig v pravo smer.
LP
zgornja tabel na sliki je situacija v bazi, spodnaj tabela je razultat poizvedbe, ki jo želim napisati.
želim narediti avtomatsko generiranje telefonskega cenika. Vse cene za posamezno destinacijo imam vpisane v bazi, vendar pa mi oblika zapisa v bazi ne ustreza glede na željeno obliko telefonskega imenika. ZA lažje razumevanje kaj želim narediti sem prilepil sliko. Sem že poskušal zadevo narediti z dvojno pizvedbo in zapisom v novo tabelo vendar se mi to ne zdi najbolj smotrno. Kot prvo me zanima ali je takšna poizvedba kot je predvidena na spodnji sliki sploh mogoča, in če je bi prosil za pomoč ali vsaj namig v pravo smer.
LP
zgornja tabel na sliki je situacija v bazi, spodnaj tabela je razultat poizvedbe, ki jo želim napisati.
borchi ::
ghetto varjanta...
select distinct DESTINACIJA
, (select top 1 CENA from TABELA where DESTINACIJA = t1.DESTINACIJA and TIP = 'fiksni') as CENA_FIKSNI
, (select top 1 CENA from TABELA where DESTINACIJA = t1.DESTINACIJA and TIP = 'mobilni') as CENA_MOBILNI
from TABELA t1
select distinct DESTINACIJA
, (select top 1 CENA from TABELA where DESTINACIJA = t1.DESTINACIJA and TIP = 'fiksni') as CENA_FIKSNI
, (select top 1 CENA from TABELA where DESTINACIJA = t1.DESTINACIJA and TIP = 'mobilni') as CENA_MOBILNI
from TABELA t1
l'jga
Zgodovina sprememb…
- spremenil: borchi ()
fusioman ::
Lahko tud z group by
recimo: SELECT destinacija, cena, tip FROM ... GROUP BY destinacija, tip
recimo: SELECT destinacija, cena, tip FROM ... GROUP BY destinacija, tip
xsenon ::
tnx za tale query, mislm da je tole zelo blizu rešitve a mi lahko poveš kaj pomeni "top 1" zaenkrat sem tale top 1 odstranil iz querija ker mi je javljal napako, po odstranitvi pa mi javi sledečo napako "Subquery returns more than 1 row".
Kako naj rešim zadvo?
LP
Kako naj rešim zadvo?
LP
darkolord ::
na koncu subquerya daj LIMIT 1
TOP oz LIMIT omejita število vrnjenih vrstic
TOP oz LIMIT omejita število vrnjenih vrstic
Zgodovina sprememb…
- spremenilo: darkolord ()
borchi ::
ups, mysql.
namesto 'top 1' uporabiš 'limit 1'
mogoče takole:
select CENA
from TABELA
where DESTINACIJA = t1.DESTINACIJA and TIP = 'fiksni'
limit 1
ne vem točno kam natiščiš 'limit', nimam nobenega mysql pri roki
namesto 'top 1' uporabiš 'limit 1'
mogoče takole:
select CENA
from TABELA
where DESTINACIJA = t1.DESTINACIJA and TIP = 'fiksni'
limit 1
ne vem točno kam natiščiš 'limit', nimam nobenega mysql pri roki
l'jga
xsenon ::
Takole zgleda moja poizvedba:
SELECT distinct destination,
(select sdRate from rating.cenik_sipura where destination = cenik_sipura.destination and connType = 'Fixed' ) as CENA_FIKSNI limit 1,
(select sdRate from rating.cenik_sipura where destination = cenik_sipura.destination and connType = 'Mobile') as CENA_MOBILNI limit 1
from rating.cenik_sipura
tole pa je napaka, ki jo javi ko poženem to poizvedbo
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(select sdRate from rating.cenik_sipura where destination = cenik_sipura.destina' at line 3
Ima kdo kakšno idejo?
SELECT distinct destination,
(select sdRate from rating.cenik_sipura where destination = cenik_sipura.destination and connType = 'Fixed' ) as CENA_FIKSNI limit 1,
(select sdRate from rating.cenik_sipura where destination = cenik_sipura.destination and connType = 'Mobile') as CENA_MOBILNI limit 1
from rating.cenik_sipura
tole pa je napaka, ki jo javi ko poženem to poizvedbo
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(select sdRate from rating.cenik_sipura where destination = cenik_sipura.destina' at line 3
Ima kdo kakšno idejo?
romci ::
Brez kaksnih subselectov ali joinov:
SELECT destinacija, SUM(CASE tip WHEN 'fiksni' THEN cena ELSE 0 END) AS cena_fiksni, SUM(CASE tip WHEN 'mobilni' THEN cena ELSE 0 END) AS cena_mobilni FROM cene GROUP BY destinacija
Oz. verzija z IF, ki je morda malo hitrejsa:
SELECT destinacija, SUM(IF (tip = 'fiksni', cena, 0)) AS cena_fiksni, SUM(IF(tip = 'mobilni', cena, 0)) AS cena_mobilni FROM cene GROUP BY destinacija
SELECT destinacija, SUM(CASE tip WHEN 'fiksni' THEN cena ELSE 0 END) AS cena_fiksni, SUM(CASE tip WHEN 'mobilni' THEN cena ELSE 0 END) AS cena_mobilni FROM cene GROUP BY destinacija
Oz. verzija z IF, ki je morda malo hitrejsa:
SELECT destinacija, SUM(IF (tip = 'fiksni', cena, 0)) AS cena_fiksni, SUM(IF(tip = 'mobilni', cena, 0)) AS cena_mobilni FROM cene GROUP BY destinacija
-- not all those who wander are lost...
Zgodovina sprememb…
- spremenil: romci ()
borchi ::
ja, romci-jeva rešitev je še bolj 'ghetto'
(ni niti tolk generalna, da bi delala za vse tipe podatkov (vsaj 'max' uporabi namesto 'sum')...)
(ni niti tolk generalna, da bi delala za vse tipe podatkov (vsaj 'max' uporabi namesto 'sum')...)
l'jga
romci ::
V nekajletnem delu z SQLom sem moral ze veckrat row-e prikazat kot column-e a se nisem nasel bolj elegantnega stavka kot tole ghetto zadevco (en subselect za vsak column VS noben subselect? nobrainer).
Generalnost pa ni bla requirement tule, ce so v tabeli pac cene. Sestevanje je malenkost hitrejse od primerjav, ki jih rabi proc za izvedbo 'max', pri generalnosti se pa 'max'-u seveda, kot si rekel, ne mores izognit :)
Generalnost pa ni bla requirement tule, ce so v tabeli pac cene. Sestevanje je malenkost hitrejse od primerjav, ki jih rabi proc za izvedbo 'max', pri generalnosti se pa 'max'-u seveda, kot si rekel, ne mores izognit :)
-- not all those who wander are lost...
darkolord ::
se nisem nasel bolj elegantnega stavka kot tole ghetto zadevcoNo ja, PIVOT je bolj eleganten. Samo pač v SQL Serverju.
xsenon ::
Ojla,
sedaj sem ugotovil, da mi poizvedba sicer dela in mi vrne pravilno v kolonah zadeve, samo imam pa problem da mi v vseh fildih vrne iste cifre (vidno na sliki). uporabil sem sledečo poizvedbo:
SELECT distinct destination,(SELECT sdRate FROM rating.cenik_sipura WHERE destination = cenik_sipura.destination and connType = 'Fixed' limit 1) as CENA_FIKSNI,
(SELECT sdRate FROM rating.cenik_sipura WHERE destination = cenik_sipura.destination and connType = 'Mobile' limit 1) as CENA_MOBILNI
FROM rating.cenik_sipura
Ponavljajoči se števili nista prvi števili v tabeli.
sedaj sem ugotovil, da mi poizvedba sicer dela in mi vrne pravilno v kolonah zadeve, samo imam pa problem da mi v vseh fildih vrne iste cifre (vidno na sliki). uporabil sem sledečo poizvedbo:
SELECT distinct destination,(SELECT sdRate FROM rating.cenik_sipura WHERE destination = cenik_sipura.destination and connType = 'Fixed' limit 1) as CENA_FIKSNI,
(SELECT sdRate FROM rating.cenik_sipura WHERE destination = cenik_sipura.destination and connType = 'Mobile' limit 1) as CENA_MOBILNI
FROM rating.cenik_sipura
Ponavljajoči se števili nista prvi števili v tabeli.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [SQL] Unikatni izpisiOddelek: Programiranje | 2193 (1580) | 111111111111 |
» | SQL poizvedbaOddelek: Programiranje | 3235 (2580) | awy |
» | [SQL] PgAdmin preprosto vprasanje povezano s stolpci v tabeliOddelek: Programiranje | 2185 (1544) | Cvele2011 |
» | sql select stavekOddelek: Programiranje | 1449 (1351) | zavajon |
» | MYSQL vprašanjeOddelek: Programiranje | 1771 (1386) | MrBrdo |