안녕하세요. 공부중인 취준생입니다. 공부하다 도저히 알 곳이 없어 여기에 질문하게 되었습니다.

아래 쿼리는 반, 번호, 점수 테이블이라고 보시면 되는데요

A반의 1번과 2번 3번이 같은 점수인 경우 1번에만 점수를 입력하고 2,3번에는 NULL값으로 놔둔 테이블입니다.

즉 A의 2,3은 50점 A의 5는 70점 이런식입니다.

 

문제1번의 쿼리는 이해를 했는데(사실 로직은 잘 이해가 안됩니다.)

문제2번의 쿼리는 이해가 안되더라구요.

NULL값이 모두 채워진 테이블에서 seq가 작은 값을 찾아서 NULL로 바꿔준다는 것이 이해가 되지 않습니다.

제가 기본적인 로직이 실행이 어떤식으로 되는지 잘 이해가 되지 않는데 혹시 가능하시다면 문제 2번을 디버깅하듯이 순서대로 설명해주실 수 있는 분이 계시다면 감사하겠습니다.

 


DROP TABLE IF EXISTS OmitTbl;
CREATE TABLE OmitTbl
(keycol CHAR(8) NOT NULL,
 seq    INTEGER NOT NULL,
 val    INTEGER ,
  CONSTRAINT pk_OmitTbl PRIMARY KEY (keycol, seq));

INSERT INTO OmitTbl VALUES ('A', 1, 50);
INSERT INTO OmitTbl VALUES ('A', 2, NULL);
INSERT INTO OmitTbl VALUES ('A', 3, NULL);
INSERT INTO OmitTbl VALUES ('A', 4, 70);
INSERT INTO OmitTbl VALUES ('A', 5, NULL);
INSERT INTO OmitTbl VALUES ('A', 6, 900);
INSERT INTO OmitTbl VALUES ('B', 1, 10);
INSERT INTO OmitTbl VALUES ('B', 2, 20);
INSERT INTO OmitTbl VALUES ('B', 3, NULL);
INSERT INTO OmitTbl VALUES ('B', 4, 3);
INSERT INTO OmitTbl VALUES ('B', 5, NULL);
INSERT INTO OmitTbl VALUES ('B', 6, NULL);

 

문제 1 NULL 값을 해당 값으로 채워주기
UPDATE OmitTbl
    SET val = (SELECT T1.val
               FROM OmitTBl T1
               WHERE OmitTBl.keycol = T1.keycol
               AND T1.seq = (SELECT MAX(seq)
                                  FROM OmitTbl T2 
                                  WHERE OmitTbl.keycol = T2.keycol 
                                  AND OmitTbl.seq > T2.seq
                                  AND T2.val IS NOT NULL))
WHERE val is NULL;

 

문제 2 (val이 중복인 값은  다시 NULL값으로 변경)

UPDATE OmitTbl
SET val = CASE WHEN val = (SELECT T1.val
          FROM OmitTbl T1
          WHERE T1.keycol = OmitTbl.keycol 
          AND T1.seq = (SELECT MAX(seq)
                             FROM OmitTbl T2
                             WHERE T2.keycol = OmitTbl.keycol
                             AND OmitTbl.seq > T2.seq
                             AND OmitTbl.val = T2.val))
        THEN NULL
        ELSE val END;
 

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 28296
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 15463
10921 SQL 쿼리 질문 하고싶습니다. [1] file 이정호2958 2023.07.12 125
10920 중국어 깨짐 관련문의좀 드리겠습니다. [2] 처리짱 2023.07.07 74
10919 ms-sql 과 oracle sql 의 펑션 select 속도 차이?? [3] 모카모카 2023.07.07 125
10918 원격 프로시저 호출 관련 질문드립니다! [1] 갈대 2023.07.07 103
10917 날짜별 요율 쿼리 질문입니다~ [2] 남다른강인함 2023.07.05 96
10916 Query 문의: Row group단위 sum [1] 서영덕 2023.07.05 60
10915 (초보 MSSQL 질문) 다른 테이블의 열을 복사하기 [4] 폴라리스 2023.07.05 66
10914 ASP BULK INSET 예러 - 도와주세요! [2] hjh**** 2023.06.27 82
10913 SSIS 를 사용하는 기업이 있나요? [3] 주식회사돈슨 2023.06.14 142
10912 MSSQL 쿼리튜닝관련 도움요청드립니다. HSQL 2023.06.13 150
10911 MS SQL Server에서 데이터의 Column 갯수가 많을 경우 어떻게 하면 좋을까요? [2] 아슈로 2023.06.12 120
10910 mysql에서 select문 분기 하는 방법좀 알고 싶습니다. [3] 아싸라비아콜롬비아 2023.06.07 179
10909 sql command+enter 누르면 계속 프로그램이 종료됩니다 ㅠㅠ [1] 고양이 2023.05.28 66
10908 대용량 데이터 추출에 대한 문의 [1] 시커먼뜨거운메일 2023.05.26 96
10907 MSSQL 서버역할 관련 질문드립니다. [1] file awfkjhaskdfh 2023.05.18 125
10906 MSSQL쿼리 관련 질문드립니다 [4] 미라클0751 2023.05.11 155
10905 빈값으로 변환 질문 [1] Just 2023.05.10 70
10904 데이터 추출 쿼리 질문드립니다 [3] 찐유에한 2023.04.17 149
10903 종료일자 품목 안보이게 하기 [1] 슈토파이터 2023.03.29 123
» 안녕하세요 SQL 실행순서에 대해 질문이 있습니다. [3] 이진우5935 2023.03.28 170





XE Login