sql >> Databáze >  >> RDS >> Mysql

Jak získat min max a avg z tabulky v mysql s různými řádky?

Pokud chcete hodnoty v jednom řádku, můžete to udělat takto:

select max(playtime), min(playtime), avg(playtime)
from yourtable
group by mediaid;

Pokud je chcete v samostatných řádcích, použijte UNION ALL :

select max(playtime) playtime, mediaid, 'Max' Type
from yourtable
group by mediaid
union all
select min(playtime) playtime, mediaid, 'Min'
from yourtable
group by mediaid
union all
select avg(playtime) playtime, mediaid, 'Avg'
from yourtable
group by mediaid
order by mediaid, playtime;

viz SQL Fiddle s ukázkou

Upravte #1 pomocí přidaných ukázkových dat:

select m.medTitle, 
  min(TIMESTAMPDIFF(SECOND, s.dmtViewStart, s.dmtViewEnd)) playtime
from tbldoctormediatracktest s
left join tblmedia m
  on s.MedId = m.MedId
group by m.medTitle
union all

select m.medTitle, 
  avg(TIMESTAMPDIFF(SECOND, s.dmtViewStart, s.dmtViewEnd)) playtime
from tbldoctormediatracktest s
left join tblmedia m
  on s.MedId = m.MedId
group by m.medTitle
union all

select m.medTitle, 
  max(TIMESTAMPDIFF(SECOND, s.dmtViewStart, s.dmtViewEnd)) playtime
from tbldoctormediatracktest s
left join tblmedia m
  on s.MedId = m.MedId
group by m.medTitle
order by medTitle,  playtime

Viz SQL Fiddle s ukázkou




  1. MySQL:Proč 5. ID v klauzuli IN drasticky mění plán dotazů?

  2. Maximální délka názvu sloupce v MySQL

  3. Django self join , Jak převést tento dotaz na dotaz ORM

  4. Používá MySQL existující indexy při vytváření nových indexů?