programing

MySQL의 열에 대한 단순 중위수 계산

goodjava 2023. 1. 24. 08:12

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