Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie bekomme ich min max und avg aus einer Tabelle in mysql mit verschiedenen Zeilen?

Wenn Sie die Werte in einer einzigen Zeile haben möchten, können Sie Folgendes tun:

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

Wenn Sie sie in getrennten Zeilen haben möchten, verwenden Sie ein 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;

siehe SQL Fiddle mit Demo

Bearbeiten Sie Nr. 1 mit Ihren hinzugefügten Beispieldaten:

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

Siehe SQL Fiddle mit Demo