반응형
반응형

[DB] NULLIF 함수 , 주요 사용 사례 (NULLIF + COALESCE)

 

NULLIF의 주된 목적은 데이터를 NULL로 표준화하여 다른 COALESCE나 IS NULL과 같은 함수와 결합해 사용하는 데 있습니다.

SELECT
    ProductName,
    COALESCE(
        NULLIF(ProductName, ''),  -- ProductName이 ''이면 NULL을 반환
        '정보 없음'              -- NULL이 되면 '정보 없음'으로 대체
    ) AS StandardizedName
FROM
    Products;

 

ProductName 컬럼에 NULL 또는 **빈 문자열('')**이 들어있을 때, 이를 '정보 없음'으로 통일하여 표시하고 싶을 때 사용합니다.

 

튜닝 및 조언 💡

  • 가독성: CASE WHEN A = B THEN NULL ELSE A END 구문을 대체하는 간결한 방식으로, 쿼리의 가독성을 크게 높여줍니다.
  • NULL 처리의 표준화: NULLIF는 데이터 정제 및 ETL(Extract, Transform, Load) 프로세스에서 특정 "표준 무효 값" (예: -99, 'N/A', 'NA')을 데이터베이스의 표준 NULL 값으로 변환하는 데 매우 유용합니다.
반응형
반응형

 

LAG 함수란?

LAG 함수는 SQL 윈도우 함수의 한 종류로, 현재 행을 기준으로 이전 행의 값을 가져오는 역할을 합니다. 주로 시계열 데이터나 순서가 중요한 데이터에서 이전 행의 값과 현재 행의 값을 비교하거나 계산할 때 사용됩니다.

 

LAG (scalar_expression [, offset] [, default]) OVER (
[PARTITION BY partition_expression, ... ]
ORDER BY sort_expression [ASC | DESC], ...
)

 

 

  • scalar_expression: 이전 행에서 가져오고 싶은 컬럼의 이름.
  • offset: 현재 행으로부터 몇 칸 이전의 행을 참조할지 지정합니다. 기본값은 1입니다.
  • default: offset만큼 떨어진 이전 행이 없을 때(보통 첫 번째 행), 반환할 기본값입니다. 기본값은 NULL입니다.
  • PARTITION BY: 데이터를 특정 그룹으로 나눕니다. 그룹이 바뀌면 LAG 연산도 다시 시작됩니다.
  • ORDER BY: 행의 순서를 결정합니다. LAG 함수는 이 순서에 따라 이전 행을 식별합니다.

 

 

 

 

  • LAG(Amount, 1, 0): Amount 컬럼의 값을 가져오되, 1칸 이전 행의 값을 가져오고, 이전 행이 없을 경우 0을 반환합니다.
  • OVER (ORDER BY SaleDate): 데이터를 SaleDate 오름차순으로 정렬하여 LAG 함수가 순서를 인식하도록 합니다.

LAG 함수는 이처럼 이전 값과의 비교, 이전 대비 변화량 계산, 누적 합계 재계산 등 다양한 분석 작업에 매우 유용합니다.

 

 

 

반응형
반응형

[SQL] 여러 개의 UPDATE 문을 실행한 후, 최종적으로 영향을 받은 전체 행의 개수를 세고 싶다

 

@@ROWCOUNT는 직전에 실행된 SQL 문이 영향을 준 행의 개수를 반환하는 전역 변수예요. 여러 개의 UPDATE 문을 실행할 경우, 각 UPDATE 문 직후에 이 값을 변수에 누적해서 더하면 최종 결과를 얻을 수 있어요.

 

-- 총 업데이트된 행 수를 저장할 변수 선언
DECLARE @TotalRowCount INT = 0;

-- 첫 번째 UPDATE 문 실행
UPDATE dbo.Customers
SET CustomerStatus = 'VIP'
WHERE TotalPurchases >= 100000;

-- 첫 번째 UPDATE의 영향을 받은 행 수를 변수에 더하기
SET @TotalRowCount = @TotalRowCount + @@ROWCOUNT;

-- 두 번째 UPDATE 문 실행
UPDATE dbo.Customers
SET CustomerStatus = 'Gold'
WHERE TotalPurchases >= 50000 AND TotalPurchases < 100000;

-- 두 번째 UPDATE의 영향을 받은 행 수를 변수에 더하기
SET @TotalRowCount = @TotalRowCount + @@ROWCOUNT;

-- 최종적으로 업데이트된 총 행 수 출력
PRINT '총 ' + CAST(@TotalRowCount AS NVARCHAR(10)) + '개의 행이 업데이트되었습니다.';
반응형
반응형

[MSSQL] update 구문 여러개를 실행하고 그 결과 row의 총 개수를 구하라

DECLARE @TotalAffectedRows INT = 0; -- 총 영향을 받은 행을 저장할 변수

-- 첫 번째 UPDATE 구문
UPDATE your_table
SET column1 = 'value1'
WHERE condition1;

SET @TotalAffectedRows = @TotalAffectedRows + @@ROWCOUNT; -- 영향을 받은 행 수 누적

-- 두 번째 UPDATE 구문
UPDATE your_table
SET column2 = 'value2'
WHERE condition2;

SET @TotalAffectedRows = @TotalAffectedRows + @@ROWCOUNT; -- 영향을 받은 행 수 누적

-- 세 번째 UPDATE 구문
UPDATE your_table
SET column3 = 'value3'
WHERE condition3;

SET @TotalAffectedRows = @TotalAffectedRows + @@ROWCOUNT; -- 영향을 받은 행 수 누적

-- 최종 결과 출력
SELECT @TotalAffectedRows AS TotalAffectedRows;
반응형
반응형

도구 - 옵션 - SQL Server  개체탐색기 - 명령 - 테이블 및 뷰 옵션

 상위 <n<개 행 편집 (선택) 명령의 값 수정

 
조회 및 편집  

상위 n개의 데이터를 정렬하여 조회하고 편집하고 싶을때

 

테이블 우클릭 - 상위 n개 행 편집 - 결과창 우클릭 - 창 -  SQL

SQL 창에서 order by  , where 등 쿼리 작성 

우클릭 - SQL 실행  - 결과창에서 데이터 편집

해당 테이블에서 "상위 200개 편집" 선택 후
조회된 데이터에서 우클릭 팝업 메뉴로 "창" - "조건" 선택해서 
필터에 원하는 조건 넣고 Ctrl + R 누르면 해당 데이터 조회 및 편집 가능합니다. 

 

반응형
반응형

[MSSQL] SELECT INTO - 테이블 또는 임시테이블 복사

 

select * into TEMP_테이블 from 원본테이블 [조건문]

 

 

만약 임시테이블을 생성하여 복사하고 싶다면

 

select * into #TEMP_테이블 from 원본테이블 [조건문]

 

#을 붙여주면된다.

 

##을 붙이면 전역 임시테이블로 생성되면

 

#은 해당 세션에서만 사용가능하며

##은 전역으로써 모든 세션에서 사용 가능하다.

 

임시테이블은 로그아웃 전까지 존재한다.

 

SELECT INTO TEMP TABLE statement syntax

--SELECT INTO TEMP TABLE statement syntax
SELECT * | Column1,Column2...ColumnN 
INTO #TempDestinationTable
FROM Source_Table
WHERE Condition​

 

반응형

+ Recent posts