본문 바로가기

반응형

msSQL

(69)
[MSSQL 연습] 오름차순으로 정렬하되, 같은 이름은 묶기 문제 해당 데이터를 날짜컬럼(CreDate)을 기준으로 오름차순으로 정렬하되, Name컬럼의 값이 동일한 데이터는 묶어서 보여주자 즉, 가장 작은 날짜를 가진 데이터를 최 상단에 보여주고해당 데이터의 Name 값과 동일한 데이터가 있다면!그 데이터가 다음 ROW에 보여진다. (다수일 경우 해당 데이터끼리 오름차순) 해당 Name의 데이터를 모두 나타낸 후다른 Name 값 중에서 가장 작은 날짜가 다음 ROW가 된다. 이하 반복.. 원본 데이터 IDX Name CreDate 1 A 2017-01-01 2 C 2017-01-02 3 C 2017-01-03 4 A 2017-01-03 5 B 2017-01-03 6 B 2017-01-04 7 C 2017-01-04 원하는 결과 IDXName CreDate 1 A..
[DB_MSSQL] INDEX 컬럼 (WHERE IDX=1+1 vs WHERE IDX-1=1) WHERE IDX = 1+1 vs WHERE IDX-1 = 1 승자는 WHERE IDX = 1+1 인덱스컬럼에 형 변환 및 값 변경이 발생하면, 인덱스를 제대로 타지 않을 수 있다.즉, IDX-1과 같은 값 변경이 발생하면 인덱스를 안타게 될 수 있다! 예제 SEQ 컬럼을 PK로 설정한 테이블 TABLE1이 있다. SELECT * FROM TABLE1 WHERE SEQ = 4999 + 1 위의 쿼리문을 실행해보자실행 계획을 살펴보면 다음과 같이 Clustered Index Seek 즉 인덱스를 잘 타고있다는것을 확인할 수 있다. 그러나, SELECT * FROM 테이블명 WHERE SEQ-1 = 4999 위의 쿼리처럼 인덱스컬럼에 값 변화를 주고 실행해보자실행 계획을 살펴보면 Seek이 아닌 Scan이 ..
[MSSQL] @@ROWCOUNT 영향 받은 행 수 반환 실행된 쿼리문의 영향을 받은 행의 수를 반환하는 @@ROWCOUNT에 대해 알아보자 @@ROWCOUNT 쿼리 실행문 실행 후 영향을 받은 로우의 수를 반환한다. 예제 CREATE TABLE #TEMP1 ( 제품 VARCHAR(10), 가격 INT ) INSERT INTO #TEMP1 (제품, 가격) VALUES ('티셔츠', 1000) INSERT INTO #TEMP1 (제품, 가격) VALUES ('티셔츠', 2000) INSERT INTO #TEMP1 (제품, 가격) VALUES ('바지', 5000) INSERT INTO #TEMP1 (제품, 가격) VALUES ('신발', 10000) SELECT * FROM #TEMP1 UPDATE #TEMP1 SET 가격 = 3000 WHERE 제품 = '티셔..
[MSSQL] GROUP BY 없이 컬럼과 함께 COUNT를 조회해보자 (COUNT OVER) GROUP BY 없이 컬럼값들과 함께 COUNT결과를 출력해보자 일반적으로 COUNT 함수를 사용할 때, COUNT와 함께 컬럼 값을 조회하려면 그 컬럼명들을 GROUP BY뒤에 지정해줘야한다. SELECT COL1, COl2, COL3, COUNT(*) FROM 테이블명 GROUP BY COL1, COL2, COL3 만약, GROUP BY 없이 아래와 같이 쿼리를 작성한다면, 오류 메세지를 반환하게 된다. SELECT COL1, COUNT(*) FROM 테이블명 메시지 8120, 수준 16, 상태 1, 줄 1 열 '테이블명.COL1'이(가) 집계 함수나 GROUP BY 절에 없으므로 SELECT 목록에서 사용할 수 없습니다. 자, 그렇다면 GROUP BY 없이 컬럼값들과 함께 전체 COUNT를 출력하려..
[MSSQL] 정렬 조건 없이 순위 매기기 (순번 지정) 정렬 조건 없이 순번을 매겨보자 일반적으로 순번을 지정할 때 ROW_NUMBER(), RANK, DENSE_RANK 등을 이용한다. [MSSQL] ROW_NUMBER, RANK, DENSE_RANK 순위함수 SELECT ROW_NUMBER() OVER(ORDER BY 컬럼명) FROM 테이블명 SELECT RANK() OVER(ORDER BY 컬럼명) FROM 테이블명 SELECT DENSE_RANK() OVER(ORDER BY 컬럼명) FROM 테이블명 이렇게 정렬할 기준 컬럼을 지정 후 순위를 매긴다. 하지만 SELECT 해서 나오는 결과 그대로 순위를 매기려고 한다. SELECT ROW_NUMBER() OVER(ORDER BY 1) FROM 테이블명 다음과 같이 ORDER BY 1로 하면 될 거 같..

반응형