Autor Zpráva
Perry
Profil
Zdravím..
Mám tabulku se strukturou

Nazev (varchar) - Typ (enum) - ID
A - jedna - 1
B - jedna - 2
B - dva - 3
A - dva - 4
E - tri - 5

A chtel bych data vybrat jako
Nazev - Jedna - Dva - Tri
A - 1 - 4 - NULL
B - 2 - 3 - NULL
E - NULL - NULL - 5

Neboli vytvořit sloupce se jménem podle enumu a vyplnit je IDčkama záznamů :)
Kcko
Profil
podívejte se na
GROUP_CONCAT
Perry
Profil
Kcko: GROUP_CONCAT je jen spojeni retezcu, nevytvori mi sloupce na ktery pak muzu pristupovat jako na [jedna], [dva] atd...
Kcko
Profil
Ale to nevytvoří žádná funkce. Jak chcete přistupovat na sloupce, když to jsou jen odlišné hodnoty pouze jednoho?
Kajman_
Profil *
Možná vygenerovat něco jako
select nazev,
       max(case
             when typ = 'jedna' then
              id
           end) Jedna,
       max(case
             when typ = 'dva' then
              id
           end) Dva
from   tabulka
group  by nazev

Ale lepší bude formátovat tabulku např. v php.
Perry
Profil
Kajman_: Zkusím porovnat časy, zda to vyjde lépe přes MySQL nebo to ručně pak dělat v PHP
Perry
Profil
Tak jsem to testoval... Původní vybírací dotaz běžel 45ms (vybíral cca 8x více řádek), nyní to běží kolem 20ms s tím, že řádky jsou ve sloupcích a grupovaný podle nazvu... takže je to urychlení, tím pádem se nevyplatí PHP (otázka paměti je druhá věc, ale nemělo by to nějak moc vytěžovat)
Perry
Profil
Kajman:
A nevíš, jak bych případně spočítal průměr pro nazev ?

Mám tabulku
hodnoty(hodnota, ID)
, kde jsou podle id hodnoty ( pro jedno id více ) a potřebuji v tom selectu získat průměrnou hodnotu z těchto hodnot.
panther
Profil
Perry:
jak bych případně spočítal průměr pro nazev ?
avg
Perry
Profil
jo.. je to pomocí AVG... ale ta AVG by musel být něco ve stylu
select nazev,
       max(case
             when typ = 'jedna' then
              id
           end) Jedna,
       max(case
             when typ = 'dva' then
              id
           end) Dva,
       (SELECT AVG(hodnota) FROM hodnoty WHERE ID IN (Jedna, Dva)) AS prumer
from   tabulka
group  by nazev


což ovšem takto nefunguje a nevím jak to napsat
Kajman_
Profil *
a nevím jak to napsat

Čeho přesně potřebujete průměr? Nebude na to lepší druhý dotaz?
Perry
Profil
No.. potřebuju průměr u každého záznamu

A - 1 - 4 - NULL - prumer pro A (z tabulky hodnoty pro ID 1, 4)
B - 2 - 3 - NULL - prumer pro B (z tabulky hodnoty pro ID 2, 3)
E - NULL - NULL - 5 - prumer pro E (z tabulky hodnoty pro ID 5)
Kajman_
Profil *
select t.nazev,
       max(case
             when t.typ = 'jedna' then
              t.id
           end) Jedna,
       max(case
             when t.typ = 'dva' then
              t.id
           end) Dva,
       avg(h.hodnota) prumer
from   tabulka t
left join hodnoty h on t.id=h.id
group  t.nazev
Perry
Profil
Díky ... to je ono...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0