본문 바로가기
MySql

MySQL로 중앙값을 계산하는 간단한 방법

by 베이스 공부 2021. 1. 24.
반응형

MySQL로 중앙값을 계산하는 가장 간단한 (그리고 너무 느리지 않기를 바랍니다) 방법은 무엇입니까? 평균을 찾기 위해 AVG (x) 를 사용했지만 중앙값을 계산하는 간단한 방법을 찾기가 어렵습니다. 지금은 모든 행을 PHP로 반환하고 정렬을 수행 한 다음 중간 행을 선택하지만 확실히 단일 MySQL 쿼리에서이를 수행하는 간단한 방법이 있어야합니다.

예제 데이터 :

id | val
--------
 1    4
 2    7
 3    2
 4    2
 5    9
 6    8
 7    3

val 을 기준으로 정렬하면 2 2 3 4 7 8 9 가 제공되므로 중앙값은 SELECT AVG (val) <과 비교하여 4 여야합니다. / code> == 5 .

 

해결 방법

 

MariaDB / MySQL에서 :

SELECT AVG(dd.val) as median_val
FROM (
SELECT d.val, @rownum:=@rownum+1 as `row_number`, @total_rows:=@rownum
  FROM data d, (SELECT @rownum:=0) r
  WHERE d.val is NOT NULL
  -- put some where clause here
  ORDER BY d.val
) as dd
WHERE dd.row_number IN ( FLOOR((@total_rows+1)/2), FLOOR((@total_rows+2)/2) );


또한 AVG (dd.val) dd.row_number IN (...) 은 레코드 수가 짝수 일 때 중앙값을 올바르게 생성하는 데 사용됩니다. 추리:

SELECT FLOOR((3+1)/2),FLOOR((3+2)/2); -- when total_rows is 3, avg rows 2 and 2
SELECT FLOOR((4+1)/2),FLOOR((4+2)/2); -- when total_rows is 4, avg rows 2 and 3


 

참조 페이지 https://stackoverflow.com/questions/1291152

 

 

반응형

댓글