Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Mediana liczby pogrupowana według dnia

Mam nadzieję, że nie zgubiłem się i nie komplikowałem zbytnio rzeczy, ale oto, co wymyśliłem:

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

To, co zrobiłem tutaj, to głównie zresetowanie numeru wiersza do 1, gdy data się zmieni (ważne jest, aby uporządkować według created_at) i uwzględniłem datę, abyśmy mogli pogrupować według niej. W zapytaniu obliczającym sumę wierszy uwzględniłem również created_at, dzięki czemu możemy połączyć dwa podzapytania.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO — Wstaw dużą tablicę do bazy danych MySQL

  2. Jak wstawić wartość NULL ze zmiennej PHP do MySQL, unikając wstrzykiwania SQL?

  3. Kiedy używać MyISAM i InnoDB?

  4. Wizualne tworzenie baz danych za pomocą MySQL Workbench

  5. Najlepszy sposób na utworzenie punktu końcowego SPARQL dla RDBMS (bazy danych MySQL)