Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Đếm số trung vị được nhóm theo ngày

Tôi hy vọng mình không buông lỏng bản thân và những thứ quá phức tạp, nhưng đây là những gì tôi đã nghĩ ra:

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

Những gì tôi đã làm ở đây, chủ yếu chỉ là đặt lại rownumber thành 1 khi ngày thay đổi (điều quan trọng là phải đặt hàng theo create_at) và bao gồm ngày để chúng tôi có thể nhóm theo ngày. Trong truy vấn tính toán tổng số hàng, tôi cũng đã đưa vào create_at, vì vậy chúng ta có thể kết hợp hai truy vấn con.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo một bài đăng có liên quan hoặc tương tự bằng PHP &MySQL

  2. MySQL CHÈN VÀO với điều kiện kép cho NẾU KHÔNG TỒN TẠI

  3. Debezium xả hết thời gian chờ và lỗi OutOfMemoryError với MySQL

  4. Không thể nhận dữ liệu mysql (Chọn CodeIgniter)

  5. Làm thế nào để cập nhật dữ liệu đã thay đổi vào Cơ sở dữ liệu bằng cách sử dụng JTable?