MySQL 은 row 를 어떻게 실현 합 니까?number()및 rownumber over(partition by column)
2402 단어 MySQL
Oacle 에서 일부 데 이 터 를 처리 할 때 row 를 사용 합 니 다.number()over(partition by a order by b desc)함수 가 상당히 편리 합 니 다.안 타 깝 게 도 이렇게 손 쉬 운 도 구 는 MySQL 에 없습니다.쓰 려 면 알 아서 해 야 지.
우선 rownumber()
먼저 시 계 를 만들다.
DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
`record_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT ' id',
`employee_id` int(10) NULL DEFAULT NULL COMMENT ' ',
`employee_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ' ',
`group_no` int(10) NULL DEFAULT NULL COMMENT ' ',
`salary` decimal(10, 2) NULL DEFAULT NULL COMMENT ' ',
PRIMARY KEY (`record_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Records of employee
-- ----------------------------
INSERT INTO `employee` VALUES (1, 1, ' ', 1, 1000.00);
INSERT INTO `employee` VALUES (3, 2, ' ', 1, 2000.00);
INSERT INTO `employee` VALUES (5, 3, ' ', 2, 2001.00);
INSERT INTO `employee` VALUES (7, 4, ' ', 2, 1996.00);
INSERT INTO `employee` VALUES (9, 5, ' ', 3, 1998.00);
INSERT INTO `employee` VALUES (11, 6, ' ', 4, 2005.00);
위의 시 계 를 둘러싸 고 쓰 세 요.우 리 는 데 이 터 를 조회 한 후에 정렬 을 추가 하 기 를 희망 한다.그럼 우 리 는 아래 에 이렇게 쓰 면 돼.
select x.*,(@r:=@r+1) as rank from (
select e.record_id,e.employee_id,e.employee_name,e.group_no,e.salary
from employee e
order by e.salary desc) x,(select @r:=0) r
rank 은 우리 가 조회 한 결과 의 정렬 값 입 니 다.
다음:rownumber(@partition by column)
여기 에는 그룹 만 있 기 때문에 우 리 는 먼저 데 이 터 를 정렬 해 야 한다.만약 에 우리 가 직원 을 부서 에 따라 그룹 을 나 누 려 면 임금 이 많 고 적 게 줄 여야 한다.우 리 는 먼저 데 이 터 를 처리 한 후에 배열 순 서 를 늘 리 고 SQL 에서 결 과 를 조회 한 후에 groupno.그룹 을 나 누 었 습 니 다.새로 추 가 된 정렬 은 rank 입 니 다.밖 에 한 층 을 채 웠 고 필요 한 필드 와 rank 열 만 가 져 왔 습 니 다.SQL 로 바로 올 려.
select z.employee_id,z.employee_name,z.group_no,z.salary,z.rank from(
select x.*,@rownum:=@rownum+1,if(@part=x.group_no,@r:=@r+1,@r:=1) as rank,@part:=x.group_no from (
select e.record_id,e.employee_id,e.employee_name,e.group_no,e.salary
from employee e
order by e.group_no,e.salary desc) x,(select @rownum:=0,@part:=null,@r:=0) rt )z
부족 한 점 은 말씀 해 주 십시오.감사합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Redash를 사용할 때 몰랐던 SQL을 쓰는 법을 배웠습니다.최근 redash에서 sql을 쓸 기회가 많고, 이런 쓰는 방법이 있었는지와 sql에 대해 공부를 다시하고 있기 때문에 배운 것을 여기에 씁니다. Redash란? 월별로 데이터를 표시하고 싶습니다 주별로 데이터를 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.