>데이터 베이스 >MySQL 튜토리얼 >MySQL에서 데이터 세트의 중앙값을 계산하는 방법

MySQL에서 데이터 세트의 중앙값을 계산하는 방법

藏色散人
藏色散人앞으로
2019-09-12 11:08:006220검색

일련의 데이터(예: 특정 지역 또는 특정 회사의 중간 소득)의 중앙값을 얻으려면 일반적으로 이 작업을 3개의 작은 작업으로 세분화해야 합니다.

1. 데이터를 정렬하고 각 행에 제공합니다.

2. 중간 순위에 해당하는 값을 찾습니다.

다음은 회사 직원의 월 소득 예입니다. MySQL의 일부 복잡한 명령문을 사용하는 예입니다.

방법 1

테스트 테이블 만들기

먼저 소득 테이블을 만듭니다. 테이블 생성 문은 다음과 같습니다.

CREATE TABLE IF NOT EXISTS `employee` (
  `id`     INT                  AUTO_INCREMENT PRIMARY KEY,
  `name`   VARCHAR(10) NOT NULL DEFAULT '',
  `income` INT         NOT NULL DEFAULT '0'
)
  ENGINE = InnoDB
  DEFAULT CHARSET = utf8;
INSERT INTO `employee` (`name`, `income`)
VALUES ('麻子', 20000);
INSERT INTO `employee` (`name`, `income`)
VALUES ('李四', 12000);
INSERT INTO `employee` (`name`, `income`)
VALUES ('张三', 10000);
INSERT INTO `employee` (`name`, `income`)
VALUES ('王二', 16000);
INSERT INTO `employee` (`name`, `income`)
VALUES ('土豪', 40000);

완료 작업 1

데이터를 정렬하고 데이터의 각 행에 해당 값을 지정합니다. 데이터의 모든 순위 :

SELECT t1.name, t1.income, COUNT(*) AS rank
FROM employee AS t1,
     employee AS t2
WHERE t1.income < t2.income
   OR (t1.income = t2.income AND t1.name <= t2.name)
GROUP BY t1.name, t1.income
ORDER BY rank;

쿼리 결과는 다음과 같습니다. complete small task 2 indian 순위 번호 :

SELECT (COUNT(*) + 1) DIV 2 as rank
FROM employee;
쿼리 결과는 다음과 같습니다. 3

SELECT income AS median
FROM (SELECT t1.name, t1.income, COUNT(*) AS rank
      FROM employee AS t1,
           employee AS t2
      WHERE t1.income < t2.income
         OR (t1.income = t2.income AND t1.name <= t2.name)
      GROUP BY t1.name, t1.income
      ORDER BY rank) t3
WHERE rank = (SELECT (COUNT(*) + 1) DIV 2 FROM employee)

쿼리 결과는 다음과 같습니다. MySQL에서 데이터 세트의 중앙값을 계산하는 방법

이 시점에서 우리는 데이터 집합에서 중앙값을 구하는 방법을 알아냈습니다.

방법 2

이제 순위표를 최적화하는 또 다른 방법을 소개하겠습니다. MySQL에서 데이터 세트의 중앙값을 계산하는 방법

우리 모두는 데이터 집합을 정렬하는 방법을 알고 있습니다. 이 예에서 구현 방법은 다음과 같습니다.

SELECT name, income
FROM employee
ORDER BY income DESC
쿼리 결과는 다음과 같습니다.

그러면 한 단계 더 나아가서 열을 추가할 수 있습니다. 쿼리 결과는 무엇입니까? 이 열의 데이터 순위는 무엇입니까? MySQL에서 데이터 세트의 중앙값을 계산하는 방법

3개의 맞춤 변수를 통해 이 목표를 달성할 수 있습니다.

첫 번째 변수는 현재 데이터 행의 수입을 기록하는 데 사용됩니다.

두 번째 변수는 이전 데이터 행의 수입을 기록하는 데 사용됩니다.

세 번째 변수 변수를 사용하여 현재 데이터 행의 순위를 기록합니다

SET @curr_income := 0;
SET @prev_income := 0;
SET @rank := 0;
SELECT `name`,
       @curr_income := income                                      AS income,
       @rank := if(@prev_income != @curr_income, @rank + 1, @rank) AS rank,
       @prev_income := @curr_income                                AS dummy
FROM employee
ORDER BY income DESC

쿼리 결과는 다음과 같습니다.

그런 다음 중간 순위 번호를 찾고 추가로 중간 소득을 알아봅니다.MySQL에서 데이터 세트의 중앙값을 계산하는 방법

SET @curr_income := 0;
SET @prev_income := 0;
SET @rank := 0;
SELECT income AS median
FROM (SELECT `name`,
             @curr_income := income                                      AS income,
             @rank := if(@prev_income != @curr_income, @rank + 1, @rank) AS rank,
             @prev_income := @curr_income                                AS dummy
      FROM employee
      ORDER BY income DESC) AS t1
WHERE t1.rank = (SELECT (COUNT(*) + 1) DIV 2 FROM employee)

쿼리 결과 are:

지금까지 우리는 중앙값 문제를 해결하는 두 가지 방법을 찾았습니다. 꽃을 뿌린다.

추천: "

mysql 튜토리얼

"

위 내용은 MySQL에서 데이터 세트의 중앙값을 계산하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제