Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Hitung median dikelompokkan berdasarkan hari

Saya harap saya tidak kehilangan diri saya dan memperumit banyak hal, tetapi inilah yang saya dapatkan:

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

Apa yang saya lakukan di sini, terutama hanya untuk mengatur ulang nomor baris ke 1 ketika tanggal berubah (penting untuk memesan dengan create_at) dan memasukkan tanggal sehingga kami dapat mengelompokkannya. Dalam kueri yang menghitung total baris, saya juga menyertakan create_at, sehingga kita dapat menggabungkan dua subkueri.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Cluster (NDB) vs Replikasi MySQL (InnoDB) untuk aplikasi Rails 3:pro/kontra?

  2. Upaya tidak valid untuk mengakses bidang sebelum memanggil read()

  3. Pesan catatan kueri SQL berdasarkan frekuensi

  4. Apa perbedaan antara INSERT dan UPDATE di MySQL?

  5. Bagaimana cara kerja injeksi SQL dan bagaimana cara melindunginya?