MySQL의 열에 대한 단순 중위수 계산
나는 단순한 중간 문제에 대한 해결책을 찾기 위해 애쓰고 있다.테이블 지정my_table하나의 열만 있으면 됩니다.
my_column |
----------|
10 |
20 |
30 |
40 |
50 |
60 |
중위수 35를 반환하는 함수를 호출하려면 어떻게 해야 하나요?
중앙값을 반환하는 것만으로 이 구문을 사용할 수 있는 방법을 알 수 없습니다.
SELECT
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY my_column) OVER ( PARTITION BY my_column)
FROM
my_table
MySQL 8.0에서 테스트한 솔루션은 다음과 같습니다.
with ranked as (
select my_column,
row_number() over (order by my_column) as r,
count(my_column) over () as c
from my_table
),
median as (
select my_column
from ranked
where r in (floor((c+1)/2), ceil((c+1)/2))
)
select avg(my_column) from median
출력:
+----------------+
| avg(my_column) |
+----------------+
| 35.0000 |
+----------------+
https://stackoverflow.com/a/7263925/20860에서 메서드를 빌렸는데 MySQL 8.0 CTE와 윈도 기능에 맞게 수정했습니다.
그냥...distinct, 빈칸이 있는 경우OVER()절:
SELECT DISTINCT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY my_column) OVER () median
FROM my_table
다음을 시도해 보십시오.
SELECT col_median
FROM
(
SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY my_column) OVER () AS col_median
FROM my_table
) t
LIMIT 1;
데모
주의:PERCENTILE_CONTfunction은 창 함수이며, 이 경우 출력은 열 전체를 스캔한 후에만 확인할 수 있습니다.따라서 위의 하위 쿼리의 출력은 실제로 새 열과 함께 모든 행에서 같은 중위수 값을 갖는 열입니다.하지만 중위수를 하나의 숫자로만 보고하고 싶기 때문에, 나는 한 개의 숫자를 사용합니다.LIMIT 1outer query를 사용하여 단일 중위수 값을 얻을 수 있습니다.
언급URL : https://stackoverflow.com/questions/64755680/calculating-a-simple-median-on-a-column-in-mysql
'programing' 카테고리의 다른 글
| js 또는 jQuery를 사용하여 Ajax 요청에 커스텀 HTTP 헤더를 추가하려면 어떻게 해야 합니까? (0) | 2023.02.03 |
|---|---|
| 모키토:개인 필드 초기화 모의 (0) | 2023.01.24 |
| Vue 3: 메서드 함수에서 상태에 액세스하는 방법 (0) | 2023.01.24 |
| php에서 어레이 값의 공백을 잘라내는 방법 (0) | 2023.01.24 |
| Java 시간대를 GMT/UTC로 강제 적용 (0) | 2023.01.24 |