반응형
그룹 기준과 함께 중위수 사용
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"를 사용하는 것을 않기 때문에하지 않는 DISTINCT
MEDIAN
하다
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
반응형
'it-source' 카테고리의 다른 글
Python void 반환 유형 주석 (0) | 2022.11.29 |
---|---|
행을 MySQL 데이터베이스에 삽입하는 가장 효율적인 방법 (0) | 2022.11.29 |
Java 프로그램콘솔 출력을 여러 파일로 리다이렉트하려면 어떻게 해야 합니까? (0) | 2022.11.29 |
Java 8 Itable.ForEach()와 foreach 루프 (0) | 2022.11.29 |
기존 데이터에 대해 MySQL에서 GUID를 생성하시겠습니까? (0) | 2022.11.29 |