반응형
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
반응형
'MySql' 카테고리의 다른 글
MySQL-삽입 후 동일한 테이블 업데이트 트리거 (0) | 2021.01.24 |
---|---|
MySQL 한 테이블에서 다른 테이블로 mysql 데이터 가져 오기 (0) | 2021.01.24 |
MySQL Mac OS 10.6 (Snow Leopard), 10.7 (Lion), 10.8 (Mountain Lion)에서 PHP 및 MySQL을 활성화하는 가장 쉬운 방법은 무엇입니까? (0) | 2021.01.24 |
MySQL 데이터베이스, 테이블, 열의 데이터 정렬을 변경하는 방법은 무엇입니까? (0) | 2021.01.23 |
MySQL-하위 행을 추가하거나 업데이트 할 수 없음 : 외래 키 제약 조건이 실패 함 (0) | 2021.01.23 |
댓글