일련의 데이터(예: 특정 지역 또는 특정 회사의 중간 소득)의 중앙값을 얻으려면 일반적으로 이 작업을 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);
데이터를 정렬하고 데이터의 각 행에 해당 값을 지정합니다. 데이터의 모든 순위 :
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;
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)
쿼리 결과는 다음과 같습니다.
이 시점에서 우리는 데이터 집합에서 중앙값을 구하는 방법을 알아냈습니다.
방법 2이제 순위표를 최적화하는 또 다른 방법을 소개하겠습니다.
우리 모두는 데이터 집합을 정렬하는 방법을 알고 있습니다. 이 예에서 구현 방법은 다음과 같습니다.SELECT name, income FROM employee ORDER BY income DESC
그러면 한 단계 더 나아가서 열을 추가할 수 있습니다. 쿼리 결과는 무엇입니까? 이 열의 데이터 순위는 무엇입니까?
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
그런 다음 중간 순위 번호를 찾고 추가로 중간 소득을 알아봅니다.
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)
지금까지 우리는 중앙값 문제를 해결하는 두 가지 방법을 찾았습니다. 꽃을 뿌린다.
추천: "
mysql 튜토리얼"
위 내용은 MySQL에서 데이터 세트의 중앙값을 계산하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!