반응형
반응형

[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(마이크로소프트 SQL Server)에서 ERD(Entity Relationship Diagram) 생성을 지원하는 오픈소스 프로그램 중에서 추천할 수 있는 도구들은 다음과 같습니다:


✅ 1. DBeaver 

  • 라이선스: Apache License 2.0 (Community Edition 기준)
  • 특징:
    • 다양한 DB(MSSQL 포함) 지원
    • ERD 자동 생성 및 편집 가능
    • SQL 스크립트와 구조 동시 확인
    • 플러그인 확장 가능
  • 장점:
    • 사용 편리
    • 오픈소스이지만 기능이 풍부
  • 웹사이트: https://dbeaver.io

✅ 2. DBDiagram.io (ERD 모델링 지원 웹 도구)

  • 라이선스: 무료 온라인 도구 (오픈소스는 아니지만, 무료이고 간단하게 사용 가능)
  • 특징:
    • 간단한 마크다운 형식으로 ERD 작성
    • SQL에서 가져오기/내보내기 가능
    • 협업 지원
  • 장점:
    • 웹 기반으로 설치 없이 사용
  • 웹사이트: https://dbdiagram.io

✅ 3. SQLPad

  • 라이선스: MIT License
  • 특징:
    • 쿼리 실행 + 시각화 + ERD 기능 지원 (약간 제한적)
    • MSSQL 포함 다양한 DB 연동
    • 웹 기반 SQL 편집기
  • 웹사이트: https://github.com/sqlpad/sqlpad

✅ 4. PgModeler (PostgreSQL 전용이나 일부 호환 시도 가능)

  • MSSQL 직접 지원은 아니나, ERD 기능 강력
  • 오픈소스 구조 파악, 커스텀 DB 작업용으로 참고 가능
  • https://pgmodeler.io/

💡 기타 유료이지만 강력한 대안 (참고용)

  • dbForge Studio for SQL Server (유료, ERD 생성 좋음)
  • DataGrip (JetBrains, 유료 IDE, 강력한 ERD 지원)

추천 정리:

도구오픈소스ERD 생성MSSQL 지원설치/웹
DBeaver 설치형
SQLPad 제한적 웹 기반
DBDiagram.io ❌ (무료) ✅ (SQL import) 웹 기반
 

🔧 추천 조합:

  • 정식 업무 및 ERD 필요: DBeaver
  • 간단한 ERD 또는 공유 목적: DBDiagram.io
  • 웹 기반 쿼리툴 + 시각화: SQLPad
반응형
반응형

[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에서 A, B, 그리고 각각의 A 값에 대한 카운트를 하나의 행에 열로 표시하려면, 피벗(PIVOT) 기능을 사용할 수 있습니다. 피벗을 사용하면 각 A 값이 열로 변환되며, 각 열의 값은 해당 A 값의 카운트가 됩니다.

가정: 테이블 구조

  • TableName 테이블에 A, B 열이 있다고 가정합니다.
  • A 열에는 여러 종류의 값이 있으며, 이 값들을 기준으로 카운트를 집계합니다.

예제: 피벗을 사용하여 A 값의 카운트를 열로 표시

SELECT 
    B,
    [A1],
    [A2],
    [A3],
    [A4],
    [A5]
FROM (
    SELECT 
        B,
        A,
        COUNT(1) AS CountA
    FROM 
        TableName
    GROUP BY 
        B, A
) AS SourceTable
PIVOT (
    SUM(CountA)
    FOR A IN ([A1], [A2], [A3], [A4], [A5])
) AS PivotTable
ORDER BY B;​

설명:

  1. 서브쿼리: 먼저 B, A, 그리고 각 A 값의 카운트를 집계합니다.
    • GROUP BY B, A: B와 A로 그룹화하여 각 A 값에 대한 카운트를 계산합니다.
  2. 피벗:
    • PIVOT (SUM(CountA) FOR A IN ([A1], [A2], [A3], [A4], [A5])): 각 A 값이 열로 변환되며, 각 열의 값은 해당 A의 카운트입니다.
  3. 결과: 최종적으로 B와 각 A 값의 카운트를 열로 표시합니다.

주의사항:

  • IN 절에 지정된 A1, A2, A3, A4, A5는 실제로 A 컬럼에 있는 값으로 대체해야 합니다. 예를 들어, A 값이 'Type1', 'Type2', 'Type3' 등일 경우, 해당 값을 정확하게 열 이름으로 지정해야 합니다.
  • 만약 A 값의 종류가 동적으로 변화한다면, 동적 SQL을 사용하여 피벗 쿼리를 작성해야 할 수 있습니다.

동적 피벗 예시

동적 피벗을 사용하면 테이블의 A 값이 변해도 자동으로 피벗을 적용할 수 있습니다.

DECLARE @cols AS NVARCHAR(MAX),
        @query AS NVARCHAR(MAX);

-- A 값 가져오기
SELECT @cols = STRING_AGG(QUOTENAME(A), ', ')
FROM (SELECT DISTINCT A FROM TableName) AS Temp;

-- 피벗 쿼리 생성
SET @query = 'SELECT B, ' + @cols + '
              FROM (
                  SELECT B, A, COUNT(1) AS CountA
                  FROM TableName
                  GROUP BY B, A
              ) AS SourceTable
              PIVOT (
                  SUM(CountA)
                  FOR A IN (' + @cols + ')
              ) AS PivotTable
              ORDER BY B;';

-- 실행
EXEC sp_executesql @query;​

이 동적 피벗 예시는 A 값의 종류에 따라 자동으로 피벗 쿼리를 생성하고 실행합니다.

반응형
반응형

MSSQL에서 합산(SUM) 또는 평균(AVG) 결과를 5로 나누고 결과를 소수점 한 자리까지 표현하는 방법을 알아보겠습니다. 이를 위해 CAST 또는 ROUND 함수를 사용하여 결과를 적절히 포맷할 수 있습니다.

1. SUM 후 5로 나누기
예를 들어, Sales 테이블에서 모든 제품의 Quantity 합을 구한 후 그 결과를 5로 나누고 소수점 한 자리까지 반올림하는 쿼리는 다음과 같습니다.

sql


SELECT 
    CAST(SUM(Quantity) / 5.0 AS DECIMAL(10, 1)) AS SumDividedBy5
FROM 
    Sales;
이 쿼리에서 SUM(Quantity) / 5.0는 Quantity의 합을 5로 나누고, CAST(... AS DECIMAL(10, 1))는 결과를 소수점 한 자리까지 포맷합니다. 5.0을 사용하는 것은 결과가 실수로 처리되도록 하기 위함입니다.

2. AVG 결과 소수점 한 자리까지
Sales 테이블에서 모든 제품의 Quantity 평균을 계산하고 소수점 한 자리까지 표시하는 쿼리는 다음과 같습니다.

sql


SELECT 
    CAST(AVG(Quantity) AS DECIMAL(10, 1)) AS AverageQuantity
FROM 
    Sales;
또는 ROUND 함수를 사용하여 같은 결과를 얻을 수 있습니다.

sql


SELECT 
    ROUND(AVG(Quantity), 1) AS AverageQuantity
FROM 
    Sales;
ROUND 함수는 첫 번째 인자로 받은 값을 두 번째 인자로 지정한 소수점 자리까지 반올림합니다.

위의 방법을 사용하여 SQL 쿼리 결과의 수치를 원하는 소수점 자리까지 조절할 수 있습니다. 이를 통해 보다 정확하고 의도한 형태의 데이터 분석 결과를 얻을 수 있습니다.

반응형
반응형

varchar와 nvarchar은 SQL Server에서 문자열 데이터를 저장하는 데 사용되는 두 가지 주요 데이터 형식입니다. 주된 차이점은 문자열의 저장 방식과 처리 방법에 있습니다.

  1. 저장 방식:
    • varchar: ASCII 문자셋을 사용하여 문자열을 저장합니다. 한글이나 다국어 문자를 저장할 수 있지만, 해당 문자셋에 따라 저장 용량이 다를 수 있습니다.
    • nvarchar: 유니코드 문자셋(UTF-16)을 사용하여 문자열을 저장합니다. 모든 문자를 표현할 수 있으며, 다양한 언어 및 문자에 대한 지원이 내장되어 있습니다. 하지만 저장 용량이 더 크게 필요할 수 있습니다.
  2. 저장 공간:
    • varchar: 저장 공간을 ASCII 문자셋에 맞게 할당합니다. 따라서 한글이나 다국어 문자의 경우에는 두 글자당 2바이트가 아닌 1바이트만 사용합니다.
    • nvarchar: 고정된 2바이트의 저장 공간을 사용합니다. 모든 문자가 2바이트로 저장되므로 저장 공간이 더 큽니다.
  3. 검색 성능:
    • varchar: ASCII 문자셋을 사용하므로, 해당 문자셋으로 제한된 환경에서는 저장 공간 측면에서 더 효율적일 수 있습니다.
    • nvarchar: 유니코드 문자셋을 사용하므로 저장 공간이 더 크며, 이로 인해 저장 및 검색 성능이 더 느릴 수 있습니다.
  4. 사용 사례:
    • ASCII 문자만 다루는 경우나 저장 공간이 중요한 경우에는 varchar를 고려할 수 있습니다.
    • 다국어 문자 또는 유니코드 문자를 다뤄야 하는 경우에는 nvarchar를 사용해야 합니다.

일반적으로, 다국어 문자를 다루거나 유니코드 문자셋이 필요한 경우에는 nvarchar를 사용하는 것이 권장됩니다. 하지만 저장 공간이나 특정한 문자셋의 경우에는 varchar를 고려할 수 있습니다.

반응형

+ Recent posts