(MySQL) 샘플 솔루션


테이블 예

  1. 보너스 테이블을 만듭니다. 각 열에는 고유한 이름이 있습니다.
  2. INSERT 문을 사용하여 BONUS 테이블에 값을 입력합니다.
  3. 표에서 “부서”별로 “보너스”의 평균을 찾으십시오. .
  4. “부서”당 튜플 수를 가져옵니다. -테이블 오프
  5. 에서 봐 – “보너스”가 100 이상인 직원이 2명 이상인 “부서”의 튜플 수를 표로 작성하십시오.
  6. 전화 – “보너스 세부 정보”에서 “보너스”의 일련 번호를 표로 표시합니다.
  7. 에서 봐 – “Bonus History”별 “Bonus”의 순위를 표로 표시합니다(단, 순서는 내림차순이며 속성 이름은 “Bonus Rank”임). (팁: RANK() 사용)

위의 문제를 풀어봅시다.

6과 7은 조금 어려울 수 있습니다.


더보기

답변!!

1. 보너스 테이블을 만듭니다.

CREATE TABLE BONUS(
TEAM VARCHAR2(40) NOT NULL,
NAME VARCHAR2(40) PRIMARY KEY,
BONUS_LIST VARCHAR2(40) NOT NULL,
BONUS_TOTAL INTEGER NOT NULL
);

2. INSERT 문을 사용하여 BONUS 테이블에 값을 입력합니다.

INSERT INTO bonus VALUES ('기획','홍길동','연장근무',100);
INSERT INTO bonus VALUES ('기획','일지매','연장근무',100);
INSERT INTO bonus VALUES ('기획','최준호','야간근무',120);
INSERT INTO bonus VALUES ('기획','장길산','특별근무',90);
INSERT INTO bonus VALUES ('인터넷','강건달','특별근무',90);
INSERT INTO bonus VALUES ('인터넷','서국현','특별근무',90);
INSERT INTO bonus VALUES ('인터넷','박인식','연장근무',30);
INSERT INTO bonus VALUES ('편집','김선달','특별근무',80);
INSERT INTO bonus VALUES ('편집','황종근','연장근무',40);
INSERT INTO bonus VALUES ('편집','성춘형','야간근무',80);
INSERT INTO bonus VALUES ('편집','임꺽정','야간근무',80);
INSERT INTO bonus VALUES ('편집','황진이','야간근무',50);

3. 예) “부서”별 “보너스”의 평균을 구한다. -표.

SELECT
team,
AVG(bonus_total) AS total
FROM bonus
GROUP BY team;

네 번째 예) 각 “부서”에 대한 튜플 수를 가져옵니다. – 테이블 오프.

SELECT
team,
COUNT(team) AS team_count
FROM bonus
GROUP BY team;

5. 예시) -“보너스”가 100 이상인 직원이 2명 이상인 “부서”의 튜플 수를 표로 작성하십시오.

SELECT
COUNT(team) AS team
FROM bonus
WHERE bonus_total >= 100
GROUP BY team
HAVING COUNT(team) >= 2;

>> GROUP BY 절은 WHERE 절을 사용할 수 없습니다. HAVING을 사용해야 합니다.

6. 예) “Bonus History”에서 “Bonus”의 일련번호를 얻습니다. -테이블(단, 순서는 내림차순이며 속성 이름은 “NO”여야 함)

SELECT
bonus_list,
bonus_total,
ROW_NUMBER() OVER(PARTITION BY bonus_list ORDER BY bonus_total DESC)
FROM bonus;

>> WINDOW 함수의 ROW_NUMBER()를 사용합니다.

창 기능: GROUP BY 절을 사용하지 않고 함수 인수로 지정된 속성 범위 내에서 속성 값을 집계할 수 있습니다.

7. 예) 표의 “보너스 내역”에서 “보너스”의 순위를 찾습니다. (단, 순서는 내림차순이며 속성명은 “보너스 랭크”입니다.)

SELECT
bonus_list,
bonus_total,
RANK() OVER(PARTITION BY bonus_list ORDER BY bonus_total DESC) AS bonus_rank
FROM bonus;

>> RANK()는 WINDOW 함수에서 사용됩니다. 순위를 나타내다