Autor | Zpráva | ||
---|---|---|---|
Kubista Profil |
#1 · Zasláno: 11. 12. 2009, 17:51:59
Zdravím,
je možné nějakým elegantním způsobem, již na úrovni sql, získat maximální a minimální hodnotu ze sloupců (sloupec1, sloupec2, sloupec3, sloupec4) tak, aby to bylo pouze v rámci jednoho řádku? Pro řádek s id=1 bych získal: max=9, min=2 Pro řádek s id=2 bych získal: max=10, min=1 Tabulka (sloupec1-4 je typu int) id | jmeno | sloupec1 | sloupec2 | sloupec3 | sloupec4 1 | Jan | 5 | 2 | 3 | 9 2 | Eva | 1 | 10 | 4 | 5 Předem díky za odpověď. |
||
Kajman_ Profil * |
#2 · Zasláno: 11. 12. 2009, 18:02:16
greatest(), least() S tím, že máte asi špatný návrh, když číslujete sloupečky. |
||
Leo Profil |
#3 · Zasláno: 11. 12. 2009, 18:03:04
Není spíš špatně navržená struktura tabulek? Pokud sloupec1, ..., 4 vyjadřuje to samé? Leo
|
||
Kubista Profil |
#4 · Zasláno: 11. 12. 2009, 18:25:14 · Upravil/a: Kubista
Kajman_: díky :-)
Tabulka ve skutečnosti vypadá trochu jinak, ale v podstatě tady sloupec1-4 představuje hodnocení od 4 rozhodčích. Výsledné hodnocení je pak dáno tak, že se vyruší nejvyšší a nejnižší známka a ze zbytku se udělá průměr. Když nad tím tak přemýšlím, možná bude lepší zvolit jeden sloupec pro hodnocení a hodnocení od jednotlivých rozhodčích vkládat vždy jako nový záznam. |
||
Kajman_ Profil * |
#5 · Zasláno: 11. 12. 2009, 22:26:58
možná bude lepší zvolit jeden sloupec pro hodnocení
Jistě. Pak půjdou funkce min a max a není problém, aby hodnotilo víc rozhodčích a nic se nemusí měnit. |
||
Kubista Profil |
#6 · Zasláno: 13. 12. 2009, 09:55:16
Ještě se chci zeptat, když počítám hodnocení (vyruší se nejvyšší a nejnižší známka a ze zbytku se udělá průměr), lze to napsat nějak lépe než takto?
SELECT s.jmeno, s.prijmeni, s.stat, (SUM(znamka) - MAX(znamka) - MIN(znamka)) / (COUNT(id_rozhodci)-2) AS prumer FROM hodnoceni AS h JOIN soutezici AS s ON s.id = h.id_soutezici WHERE h.id_kolo = 3 GROUP BY h.id_soutezici, h.id_kolo, h.typ Tabulka hodnocení (sloupec typ rozlišuje známky za provedení a umělecký dojem) |
||
Kajman_ Profil * |
#7 · Zasláno: 13. 12. 2009, 10:02:28
Napsal bych to asi stejně. Snad bych jen udělal složený index (id_kolo,id_soutezici,typ) pokud ještě není.
|
||
Kubista Profil |
#8 · Zasláno: 13. 12. 2009, 11:41:22
Složený index mám :-)
Teď už snad poslední věc. Předchozí dotaz mi vrátí vždy dva výsledky u každého soutěžícího (umělecký dojem a provedení). Když bych chtěl ještě udělat součet obou výsledků, je vhodné to řešit takto? SELECT s.id, s.jmeno, s.prijmeni, s.stat, SUM(h.hodnoceni) AS hodnoceni FROM soutezici AS s JOIN ( SELECT id_soutezici, (SUM(znamka) - MAX(znamka) - MIN(znamka)) / (COUNT(id_rozhodci) - 2) AS hodnoceni FROM hodnoceni WHERE id_kolo = 3 GROUP BY id_soutezici, id_kolo, typ ) AS h ON h.id_soutezici = s.id GROUP BY s.id |
||
Kajman_ Profil * |
#9 · Zasláno: 13. 12. 2009, 12:12:29
Myslím, že je to optimální. Pokud se to nezdá pomalé, nebo se Vám nezdá explain, tak bych to použil.
|
||
Kubista Profil |
#10 · Zasláno: 13. 12. 2009, 12:30:46
Ok, díky moc. :-)
|
||
Časová prodleva: 14 let
|
0