sql >> Database >  >> RDS >> Mysql

Tel mediaan gegroepeerd op dag

Ik hoop dat ik mezelf niet ben kwijtgeraakt en dingen te ingewikkeld heb gemaakt, maar dit is wat ik bedacht:

SELECT sq.created_at, avg(sq.price) as median_val FROM (
SELECT t1.row_number, t1.price, t1.created_at FROM(
SELECT IF(@prev!=d.created_at, @rownum:=1, @rownum:[email protected]+1) as `row_number`, d.price, @prev:=d.created_at AS created_at
FROM mediana d, (SELECT @rownum:=0, @prev:=NULL) r
ORDER BY created_at, price
) as t1 INNER JOIN  
(
  SELECT count(*) as total_rows, created_at 
  FROM mediana d
  GROUP BY created_at
) as t2
ON t1.created_at = t2.created_at
WHERE 1=1
AND t1.row_number>=t2.total_rows/2 and t1.row_number<=t2.total_rows/2+1
)sq
group by sq.created_at

Wat ik hier deed, is voornamelijk om het rijnummer terug te zetten naar 1 wanneer de datum verandert (het is belangrijk om te bestellen op create_at) en de datum op te nemen zodat we er op kunnen groeperen. In de query die de totale rijen berekent, heb ik ook created_at opgenomen, zodat we de twee subquery's kunnen samenvoegen.



  1. Correct gebruik van php mysqli autocommit en rollback

  2. Controleer of mysql-database bestaat, voer actie uit op basis van resultaat

  3. MySQL:grootte van decimaal gegevenstype

  4. Wanneer een Flask-toepassing met Flask-SQLAlchemy wordt uitgevoerd, hoe gebruik ik dan tegelijkertijd de MySQL-client op dezelfde database?