Tak jsem se pokusil něco vytvořit (není to perfektní, s SQL jsem začal teprve nedávno), využil jsem funkce MIN() a MAX() vzhledem k pravidlům preferencí. Dostupné k náhledu/vyzkoušení/inspiraci zde: http://sqlfiddle.com/#!9/959053/1.
Editace: Odstraněn odkaz na vyzkoušení pro nesprávnost dotazu, díky @petrmet za upozornění.
Pomůžete s SQL dotazem?
- ChrisTaylor
- Level 2
- Příspěvky: 161
- Registrován: duben 14
- Pohlaví:
- Stav:
Offline
Re: Pomůžete s SQL dotazem?
Naposledy upravil(a) ChrisTaylor dne 30 bře 2019 12:34, celkem upraveno 1 x.
- ITCrowd
- Tvůrce článků
-
Guru Level 13.5
- Příspěvky: 23603
- Registrován: březen 10
- Pohlaví:
- Stav:
Offline
Re: Pomůžete s SQL dotazem?
Dík, rozhodně je to inspirace Už jsem pochopil jak myslel min a max petrmet.
Ale použít to nepůjde...
Můžu si za to sám, protože jsem příliš zjednodušil tabulku. On totiž ten typ telefonu není jen firemní a soukromý... K tomu je tam ještě pevná linka práce, pevná linka domů a data, fax. A možná ještě něco, nač jsem nepřišel...
Bohužel mi to nepřišlo důležité, omlouvám se.
Ale rozhodně díky za stránky, vůbec jsem netušil, že něco takového existuje, můžu aspoň zkoušet
Ale použít to nepůjde...
Můžu si za to sám, protože jsem příliš zjednodušil tabulku. On totiž ten typ telefonu není jen firemní a soukromý... K tomu je tam ještě pevná linka práce, pevná linka domů a data, fax. A možná ještě něco, nač jsem nepřišel...
Bohužel mi to nepřišlo důležité, omlouvám se.
Ale rozhodně díky za stránky, vůbec jsem netušil, že něco takového existuje, můžu aspoň zkoušet
Zkusili jste to vypnout a zapnout? Problémy řeším pouze v tématech. Do SZ mi proto píšete zbytečně.
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router
Re: Pomůžete s SQL dotazem?
Dotaz :
SELECT
last_name,
phone_number,
MIN(number_type),
MAX(number_is_preferred)
FROM
contacts
GROUP BY
last_name;
je špatně, protože pokud grupuju, tak ve výsledku lze zobrazovat pouze pole, podle kterých grupuju a agregační funkce.
Pole phone_number to pak vypíše náhodnou hodnotu, což je nesmysl.
Poznámka k mému dotazu pro inspiraci :
předpokládal jsem podle zadání, že ve struktuře je údaj o prioritě kontaktu, přičemž 1 je nejvyšší priorita a 4 nejnižší, proto jsem použil min(typ_kontaktu) k vyhledání nejdůležitějšího kontaktu pro každého zákazníka.
SELECT
last_name,
phone_number,
MIN(number_type),
MAX(number_is_preferred)
FROM
contacts
GROUP BY
last_name;
je špatně, protože pokud grupuju, tak ve výsledku lze zobrazovat pouze pole, podle kterých grupuju a agregační funkce.
Pole phone_number to pak vypíše náhodnou hodnotu, což je nesmysl.
Poznámka k mému dotazu pro inspiraci :
předpokládal jsem podle zadání, že ve struktuře je údaj o prioritě kontaktu, přičemž 1 je nejvyšší priorita a 4 nejnižší, proto jsem použil min(typ_kontaktu) k vyhledání nejdůležitějšího kontaktu pro každého zákazníka.
- ITCrowd
- Tvůrce článků
-
Guru Level 13.5
- Příspěvky: 23603
- Registrován: březen 10
- Pohlaví:
- Stav:
Offline
Re: Pomůžete s SQL dotazem?
Jasně To by ale bylo moc jednoduchý
A měl bys nějaký nápad, jak řešit dotaz, když už teď víš upřesnění?
A měl bys nějaký nápad, jak řešit dotaz, když už teď víš upřesnění?
Zkusili jste to vypnout a zapnout? Problémy řeším pouze v tématech. Do SZ mi proto píšete zbytečně.
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router
Re: Pomůžete s SQL dotazem?
Nevím, zda jsi navrhoval strukturu databáze nebo jsi dostal hotovou a jen potřebuješ zpracovávat určité údaje, ale pokud jsi v té druhé situaci, tak moje řešení by bylo takové :
-poznamenávám, že jsem zastáncem co nejjednodušších průhledných řešení, aby i v budoucnu bylo jasné, jak to funguje.
1. vytvořil bych si pohled s definovanými preferencemi pro jednotlivé klienty a kontakty :
create view kontakty as
select jmeno,cislo,
case
when typtel=1 and prefvol=1 then 1
when typtel=1 and prefvol=0 then 2
when typtel=2 and prefvol=1 then 3
when typtel=2 and prefvol=0 then 4
....
end preference
from tvojetabulka
2. použil bych dotaz, který jsem naznačil v mé první odpovědi :
select a.jmeno, b.mintyp, a.cislo
from kontakty as a
join
(select jmeno,MIN(preference) mintyp
from kontakty
group by jmeno) as b
on a.jmeno=b.jmeno and a.preference = b.mintyp
Samozřejmě místo pohledu se dá použít dočasná tabulka.
-poznamenávám, že jsem zastáncem co nejjednodušších průhledných řešení, aby i v budoucnu bylo jasné, jak to funguje.
1. vytvořil bych si pohled s definovanými preferencemi pro jednotlivé klienty a kontakty :
create view kontakty as
select jmeno,cislo,
case
when typtel=1 and prefvol=1 then 1
when typtel=1 and prefvol=0 then 2
when typtel=2 and prefvol=1 then 3
when typtel=2 and prefvol=0 then 4
....
end preference
from tvojetabulka
2. použil bych dotaz, který jsem naznačil v mé první odpovědi :
select a.jmeno, b.mintyp, a.cislo
from kontakty as a
join
(select jmeno,MIN(preference) mintyp
from kontakty
group by jmeno) as b
on a.jmeno=b.jmeno and a.preference = b.mintyp
Samozřejmě místo pohledu se dá použít dočasná tabulka.
- ITCrowd
- Tvůrce článků
-
Guru Level 13.5
- Příspěvky: 23603
- Registrován: březen 10
- Pohlaví:
- Stav:
Offline
Re: Pomůžete s SQL dotazem?
Díky za snahu
Toto řešení taky nepoužiju. SQL dotaz je pro dispečerský sw, který žádné create neumožňuje. Dispečer má pak seznam k dispozici. Doposud se to vypisovalo ručně, chtěl jsem to přepsat do sql, aby se to při změnách aktualizovalo samo, ale zjevně je to větší oříšek, než bych čekal. Zvlášť, když bych si to třeba ve vbs dokázal napsat sám...
Zřejmě to nemá řešení. I tak všem díky za návrhy, kdybych snad na něco přišel, dám vědět. Nebo kdyby měl ještě někdo jiný nápad...
Toto řešení taky nepoužiju. SQL dotaz je pro dispečerský sw, který žádné create neumožňuje. Dispečer má pak seznam k dispozici. Doposud se to vypisovalo ručně, chtěl jsem to přepsat do sql, aby se to při změnách aktualizovalo samo, ale zjevně je to větší oříšek, než bych čekal. Zvlášť, když bych si to třeba ve vbs dokázal napsat sám...
Zřejmě to nemá řešení. I tak všem díky za návrhy, kdybych snad na něco přišel, dám vědět. Nebo kdyby měl ještě někdo jiný nápad...
Zkusili jste to vypnout a zapnout? Problémy řeším pouze v tématech. Do SZ mi proto píšete zbytečně.
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router
Re: Pomůžete s SQL dotazem?
Jen pro vysvětlení :
ten pohled Create view není součástí dotazu, ten se pouze jednorázově vloží do databáze (pokud nejsi majitelem nebo správcem databáze, stačí ho požádat). Je to pouze šablona, která umožňuje uživatelům zobrazovat data v požadovaném tvaru. Je to běžný postup při práci s databázemi, kdy chceš uživatelům zobrazovat nebo naopak skrýt některá data. Ty pak v aplikaci místo tabulky použiješ pohled.
ten pohled Create view není součástí dotazu, ten se pouze jednorázově vloží do databáze (pokud nejsi majitelem nebo správcem databáze, stačí ho požádat). Je to pouze šablona, která umožňuje uživatelům zobrazovat data v požadovaném tvaru. Je to běžný postup při práci s databázemi, kdy chceš uživatelům zobrazovat nebo naopak skrýt některá data. Ty pak v aplikaci místo tabulky použiješ pohled.
Zpět na “Programování a tvorba webu”
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti