it-source

그룹 기준과 함께 중위수 사용

criticalcode 2022. 11. 29. 21:44
반응형

그룹 기준과 함께 중위수 사용

MariaDB 10.3.3에서는MEDIAN기능.유감스럽게도, 제가 그것을 사용하려고 할 때 약간의 문제가 있습니다.GROUP BY(현재 v10.3.9를 사용하고 있습니다).

다음 표 지정:

CREATE TABLE testmed
  (
     id       INT NOT NULL auto_increment,
          PRIMARY KEY(id),
     group_id INT NOT NULL DEFAULT 0,
     score    INT NOT NULL DEFAULT 0
  ); 

데이터를 채우는 방법:

INSERT INTO testmed (group_id, score) 
VALUES (1,1), (1,2), (1,2), (1,2), (1,3), (2,5), (2,7), (2,9), (2,11), (2,11);

이제 유무에 관계없이 다른 결과를 얻을 수 있습니다.GROUP BY쿼리 중:

MariaDB [test]> 테스트에서 그룹 ID, 점수, MEDIA(점수) OVER(그룹 ID별 파티션)를 선택합니다.+----------+-------+--------------------------------------------+| group_id | score | MEDIA(점수) OVER (PARTITION BY group_id) |+----------+-------+--------------------------------------------+|        1 |     1 |                               2.0000000000 ||        1 |     2 |                               2.0000000000 ||        1 |     2 |                               2.0000000000 ||        1 |     2 |                               2.0000000000 ||        1 |     3 |                               2.0000000000 ||        2 |     5 |                               9.0000000000 ||        2 |     7 |                               9.0000000000 ||        2 |     9 |                               9.0000000000 ||        2 |    11 |                               9.0000000000 ||        2 |    11 |                               9.0000000000 |+----------+-------+--------------------------------------------+10행 세트(0.000초)
MariaDB [test]> 테스트된 GROUP_id에서 group_id, 점수, MEDIA(점수) OVER(그룹_id별 파티션)를 선택합니다.+----------+-------+--------------------------------------------+| group_id | score | MEDIA(점수) OVER (PARTITION BY group_id) |+----------+-------+--------------------------------------------+|        1 |     1 |                               1.0000000000 ||        2 |     5 |                               5.0000000000 |+----------+-------+--------------------------------------------+

첫 번째는 맞는데 왜 이 기능이 정상적으로 동작하지 않는지GROUP BY현재 다음과 같은 쿼리 네스팅을 사용하고 있습니다.

MariaDB [test]> SELECT * FROM (SELECT group_id, 점수, MEDIA(점수) OVER (PARTITION BY group_id) FROM) t GROUP BY group_id;+----------+-------+--------------------------------------------+| group_id | score | MEDIA(점수) OVER (PARTITION BY group_id) |+----------+-------+--------------------------------------------+|        1 |     1 |                               2.0000000000 ||        2 |     5 |                               9.0000000000 |+----------+-------+--------------------------------------------+2줄 세트(0.000초)

그렇게 하는 게 너무 잘못된 것 같아요.

어떻게 하면 좋을까요?

두 번째 쿼리는 기술적으로 유효하지 않습니다.

SELECT
    group_id,
    score,
    MEDIAN(score) OVER (PARTITION BY group_id)
FROM testmed
GROUP BY group_id;

입니다.score은 에 있지 않습니다.GROUP BY절을 클릭합니다.여기서의 문제는 어떤 가치의score을 의도하고 있습니까?group_id 있는 인 "MariaDB"를 하고 있다는 score,score이치

분석 함수는 다음 작업 이후에 평가된다는 점에 유의하십시오.GROUP BY집약이 이루어집니다.이것이 당신이 실행하려고 했던 질문이라고 생각합니다.

SELECT DISTINCT
    group_id,
    MEDIAN(score) OVER (PARTITION BY group_id) score_median
FROM testmed;

"MariaDB"를 사용하는 것을 않기 때문에하지 않는 DISTINCTMEDIAN하다

SELECT DISTINCT
    group_id,
    score_median
FROM
(
    SELECT
        group_id,
        MEDIAN(score) OVER (PARTITION BY group_id) score_median
    FROM testmed
) t;

언급URL : https://stackoverflow.com/questions/53092447/using-median-with-group-by

반응형