조건이 있는 SQL 합계입니다. SQL의 합계 함수: SUM

SQL 언어의 SUM 함수는 단순함에도 불구하고 데이터베이스 작업 시 자주 사용됩니다. 그것의 도움으로 보조 DBMS 도구의 도움에 의지하지 않고 일부 중간 또는 최종 결과를 얻는 것이 편리합니다.

함수 구문

대부분의 언어로 SQL 구문합계는 동일합니다. 필드 이름 또는 그 중 몇 개에 대한 일부 산술 연산이 인수로 사용되어 합계가 필요합니다.

예외적 인 경우 숫자 또는 변수의 형태로 특정 값을 전송할 수 있지만 이러한 "구성표"는 큰 가치를 전달하지 않기 때문에 실제로 사용되지 않습니다. 아래는 on 함수의 구문입니다. SQL 언어:

합계(a) - 여기에서 일부 숫자 값 또는 표현식이 매개변수로 사용됩니다.

매개변수 앞에 키워드를 설정할 수 있습니다(예: DISTINCT 또는 ALL). 각각 고유하거나 모든 값을 취합니다.

SQL에서 SUM을 사용하는 예

함수가 어떻게 작동하는지 최종적으로 이해하려면 몇 가지 예를 고려해 볼 가치가 있습니다. SQL에서 SUM은 반환 결과와 중간 값(예: 조건 확인)으로 모두 사용할 수 있습니다.

첫 번째 경우, 구매 횟수가 복수일 수 있으므로 각 제품의 판매 금액을 반환하려는 경우 옵션을 고려하십시오. 결과를 얻으려면 다음 쿼리를 실행하는 것으로 충분합니다.

SELECT 제품, 합계(구매 금액) FROM Sales GroupBy Product;

에 대한 답변 이 명령각 제품의 총 구매 금액이 포함된 고유한 제품 목록이 있습니다.

두 번째 예의 경우 판매 금액이 특정 값(예: 100)을 초과한 제품 목록을 가져와야 합니다. 이 작업에 대한 결과를 얻는 방법에는 여러 가지가 있으며 그 중 가장 최적인 방법은 다음과 같습니다. 하나의 요청 실행:

SELECT Item FROM (SELECT Item, sum(구매 금액) as FROM Sales Amount) WHERE Amount> 100.

계산

요약 기능

SQL 쿼리 표현식에서는 종종 다음을 실행해야 합니다. 전처리데이터. 이를 위해 특수 기능과 표현식이 사용됩니다.

종종 특정 쿼리와 일치하는 레코드 수를 알아야 합니다.특정 숫자 열 값의 합, 최대값, 최소값 및 평균값은 얼마입니까? 이를 위해 소위 요약(통계, 집계) 기능이 사용됩니다. 요약 함수는 예를 들어 WHERE 절로 지정된 레코드 집합을 처리합니다. SELECT 문 다음에 오는 열 목록에 포함되어 있으면 결과 테이블에는 데이터베이스 테이블의 열뿐만 아니라 이러한 함수를 사용하여 계산된 값도 포함됩니다. 다음은요약 함수 목록.

  • COUNT(매개변수 ) - 매개변수에 지정된 레코드 수를 반환합니다. 모든 레코드의 수를 얻으려면 별표(*)를 매개변수로 지정해야 합니다. 열 이름을 매개 변수로 지정하면 이 열에 NULL이 아닌 값이 있는 레코드 수를 반환합니다. 열에 포함된 고유한 값의 수를 확인하려면 이름 앞에 DISTINCT 키워드를 붙입니다. 예를 들어:

클라이언트에서 SELECT COUNT(*);

SELECT COUNT (Order_amount) FROM 클라이언트;

SELECT COUNT(DISTINCT Order_amount) FROM 클라이언트;

다음 쿼리를 실행하려고 하면 오류 메시지가 표시됩니다.

SELECT 지역, COUNT(*) FROM 클라이언트;

  • SUM(매개변수 ) - 매개변수에 지정된 열 값의 합계를 반환합니다. 매개변수는 열 이름을 포함하는 표현식일 수도 있습니다. 예를 들어:

합계 선택 (Order_Sum) 클라이언트에서;

이 SQL 표현식은 고객 테이블의 Order_Sum 열에 정의된 모든 값의 합계를 포함하는 1열, 1레코드 테이블을 반환합니다.

소스 테이블에서 Order_Amount 열의 값이 루블로 표시되고 총 금액을 달러로 계산하려고 한다고 가정합니다. 예를 들어 현재 환율이 27.8이면 다음 식을 사용하여 필요한 결과를 얻을 수 있습니다.

합계 선택 (Order_Sum * 27.8) 클라이언트에서;

  • AVG(매개변수 ) - 매개변수에 지정된 열의 모든 값에 대한 산술 평균을 반환합니다. 매개변수는 열 이름을 포함하는 표현식일 수 있습니다. 예를 들어:

SELECT AVG(Order_Sum) FROM 클라이언트;

클라이언트에서 AVG 선택(Order_Sum * 27.8)

WHERE 지역<>"North_3west";

  • MAX(매개변수 ) - 매개변수에 지정된 열의 최대값을 반환합니다. 매개변수는 열 이름을 포함하는 표현식일 수도 있습니다. 예를 들어:

SELECT MAX(Amount_order) FROM 클라이언트;

SELECT MAX (Order_Sum * 27.8) FROM 클라이언트

어디 지역<>"North_3west";

  • MIN(매개변수 ) - 매개변수에 지정된 열의 최소값을 반환합니다. 매개변수는 열 이름을 포함하는 표현식일 수 있습니다. 예를 들어:

SELECT MIN (Order_Sum) FROM 클라이언트;

SELECT MIN (Amount_order * 27.8) FROM 클라이언트

어디 지역<>"North_3west";

실제로는 숫자 열의 합계, 평균, 최대값 및 최소값을 포함하는 요약 테이블을 구해야 하는 경우가 많습니다. 이렇게 하려면 그룹화(GROUP BY) 및 요약 기능을 사용해야 합니다.

지역 선택, SUM (Order_Sum) 고객으로부터

GROUP BY 지역;

이 쿼리의 결과 테이블에는 지역 이름과 해당 지역의 모든 고객의 주문 합계(총) 금액이 포함됩니다(그림 5).

이제 지역별로 모든 합계를 가져오는 요청을 살펴보겠습니다.

SELECT 지역, SUM(Order_Sum), AVG (주문량), MAX (주문량), MIN(주문_합)

클라이언트에서

GROUP BY 지역;

초기 및 최종 테이블은 그림 1에 나와 있습니다. 8. 예에서 북서부 지역만 원래 테이블에 둘 이상의 레코드로 표시됩니다. 따라서 결과 테이블에서 다른 요약 함수는 다른 값을 제공합니다.

쌀. 8. 지역별 주문금액 요약표

SELECT 문의 열 목록에서 요약 함수를 사용할 때 결과 테이블에서 해당 열의 헤더는 Expr1001, Expr1002 등과 같이 보입니다. (또는 SQL 구현에 따라 유사한 것). 그러나 요약 함수의 값과 기타 열의 제목은 원하는 대로 설정할 수 있습니다. 이렇게 하려면 SELECT 문의 열 뒤에 형식의 표현식을 지정하면 됩니다.

AS column_header

AS 키워드(as)는 결과 테이블에서 해당 열에 AS 뒤에 지정된 헤더가 있어야 함을 의미합니다. 할당된 제목을 별칭이라고도 합니다. 다음 예(그림 9)는 계산된 모든 열에 대한 별칭을 설정합니다.

지역 선택,

합집합 (Order_Sum) AS [주문 합계],

AVG (Order_Sum) AS [평균 주문 금액],

MAX (Order_Sum) AS 최대,

(Order_Sum) AS 최소,

클라이언트에서

GROUP BY 지역;

쌀. 9. 컬럼별칭을 이용한 지역별 주문금액 요약표

공백으로 구분된 여러 단어의 별칭은 대괄호로 묶습니다.

요약 함수는 SELECT 및 HAVING 절에서 사용할 수 있지만 WHERE 절에서는 사용할 수 없습니다. 하나의 HAVING 절은 WHERE 절과 유사하지만 WHERE 절과 달리 그룹으로 레코드를 선택합니다.

고객이 두 명 이상인 지역을 확인하려고 한다고 가정해 보겠습니다. 이를 위해 다음 요청을 사용할 수 있습니다.

지역 선택, 개수(*)

클라이언트에서

GROUP BY region HAVING COUNT(*)> 1;

값 처리 기능

데이터로 작업할 때 데이터를 처리해야 하는 경우가 많습니다(원하는 형식으로 변환): 문자열에서 부분 문자열 선택, 선행 및 후행 공백 제거, 숫자 반올림, 제곱근 계산, 현재 시간 결정 등. SQL에는 세 가지 유형의 함수가 있습니다.

  • 문자열 함수;
  • 숫자 함수;
  • 날짜-시간 함수.

문자열 함수

문자열 함수는 문자열을 매개변수로 사용하고 처리 후 문자열 또는 NULL을 반환합니다.

  • 서브스트링 (라인 시작부터)- 매개변수로 지정된 문자열의 결과인 하위 문자열을 반환합니다.라인 . 부분 문자열 서수가 시작 매개변수에 지정되고 길이 매개변수에 지정된 길이를 갖는 문자로 시작합니다. 줄 문자는 1부터 시작하여 왼쪽에서 오른쪽으로 번호가 매겨집니다. 여기에서 대괄호는 그 안에 포함된 표현식이 선택 사항임을 나타냅니다. 만약 표현이길이 가 사용되지 않은 경우 다음의 하위 문자열시작 원래 줄의 끝까지. 매개변수 값시작과 길이 원하는 하위 문자열이 실제로 원래 문자열 안에 있도록 선택해야 합니다. 그렇지 않으면 SUBSTRING 함수는 NULL을 반환합니다.

예를 들어:

SUBSTRING("마샤에게!" FROM 9 FOR 4) - "Masha"를 반환합니다.

SUBSTRING("마샤에게!" FROM 9) - "마샤!"를 반환합니다.

SUBSTRING(15에서 "마샤에게!") - NULL을 반환합니다.

예를 들어 다음과 같이 SQL 문에서 이 함수를 사용할 수 있습니다.

클라이언트에서 * 선택

WHERE SUBSTRING(5의 경우 1에서 영역) = "북쪽";

  • UPPER(문자열 ) - 지정된 문자열의 모든 문자를 대문자로 변환합니다.
  • LOWER(라인 ) - 지정된 문자열의 모든 문자를 소문자로 변환합니다.
  • TRIM(선두 | 후행 | BOTH ["문자"] FROM 문자열 ) - 문자열에서 선행(LEADING), 후행(TRAILING) 또는 둘 다(BOTH) 문자를 제거합니다. 삭제할 기본 문자는 공백("")이므로 공백으로 둘 수 있습니다. 이 함수는 공백을 제거하는 데 가장 자주 사용됩니다.

예를 들어:

TRIM("상트페테르부르크 시"에서 ""선행)은 "상트페테르부르크 시"를 회전합니다.

TRIM(TRALING "" FROM "city of Saint Petersburg")은 "city of Saint Petersburg"를 반환합니다.

TRIM(BOTH "" FROM "city of St. Petersburg") - "city of St. Petersburg"를 반환합니다.

TRIM(BOTH FROM "city of St. Petersburg") - "city of St. Petersburg"를 반환합니다.

TRIM(BOTH "r" FROM "city of St. Petersburg") - "city of St. Petersburg"를 반환합니다.

이 중 가장 많이 사용되는 함수는 SUBSTRING()과 TRIM()이다.

숫자 함수

숫자 함수는 매개변수로 숫자 유형의 데이터를 받아들일 수 있을 뿐만 아니라 항상 숫자 또는 NULL(정의되지 않은 값)을 반환합니다.

  • 위치 ( 대상 문자열 IN 문자열) - 지정된 문자열에서 대상 문자열의 발생을 검색합니다. 검색에 성공하면 첫 번째 문자의 위치 번호를 반환하고 그렇지 않으면 - 0을 반환합니다. 대상 문자열의 길이가 0이면(예: 문자열 "") 함수는 1을 반환합니다. 매개변수 중 하나 이상이 가 NULL이면 NULL이 반환됩니다. 줄 문자는 1부터 시작하여 왼쪽에서 오른쪽으로 번호가 매겨집니다.

예를 들어:

POSITION("e" IN "안녕하세요") - 5를 반환합니다.

POSITION("모두" IN "안녕하세요") - 8을 반환합니다.

POSITION(""안녕하세요") - 1을 반환합니다.

POSITION("안녕하세요!" IN "안녕하세요 모두") - 0을 반환합니다.

고객 테이블(그림 1 참조)에서 주소 열에는 도시 이름 외에 우편 번호, 거리 이름 및 기타 데이터가 포함됩니다. 특정 도시에 거주하는 고객에 대한 레코드를 선택해야 할 수도 있습니다. 따라서 St. Petersburg에 거주하는 클라이언트와 관련된 레코드를 선택하려면 다음 SQL 쿼리 표현식을 사용할 수 있습니다.

클라이언트에서 * 선택

WHERE POSITION("St. Petersburg" IN 주소)> 0;

데이터를 가져오기 위한 이 간단한 쿼리는 다르게 공식화될 수 있습니다.

클라이언트에서 * 선택

WHERE 주소 LIKE "% Petersburg%";

  • 추출(매개변수 ) - 날짜-시간 값 또는 간격에서 항목을 추출합니다. 예를 들어:

추출물(날짜 "2005-10-25"의 월) - 10을 반환합니다.

  • CHARACTER_LENGTH(문자열 ) - 문자열의 문자 수를 반환합니다.

예를 들어:

CHARACTER_LENGTH("안녕하세요") - 11을 반환합니다.

  • OCTET_LENGTH(문자열 ) - 문자열의 옥텟(바이트) 수를 반환합니다. 각 라틴 문자 또는 키릴 문자는 1바이트로 표시되고 한자는 2바이트로 표시됩니다.
  • 카디널리티(매개변수 ) - 항목 컬렉션을 매개변수로 사용하고 컬렉션(기수)의 항목 수를 반환합니다. 컬렉션은 예를 들어 다양한 유형의 요소를 포함하는 배열 또는 다중 집합일 수 있습니다.
  • ABS(숫자 ) - 숫자의 절대값을 반환합니다. 예를 들어:

ABS(-123) - 123을 반환합니다.

ABS(2 - 5) - 3을 반환합니다.

  • MO D(번호1, 번호2 ) - 첫 번째 숫자를 두 번째 숫자로 나눈 정수의 나머지를 반환합니다. 예를 들어:

MOD (5, h) - 2를 반환합니다.

MOD (2, h) - 0을 반환합니다.

  • LN(번호 ) - 숫자의 자연 로그를 반환합니다.
  • EXP(숫자) - e 숫자를 반환합니다. (수의 거듭제곱에 대한 자연 로그의 밑).
  • POWER(1번,2번 ) - 숫자 1을 반환합니다. 2 번 (숫자 1의 숫자 2의 거듭제곱).
  • SQRT(숫자 ) - 숫자의 제곱근을 반환합니다.
  • FLOOR(수 ) - 지정된 매개변수를 초과하지 않는 가장 큰 정수를 반환합니다(내림). 예를 들어:

FLOOR(5.123) - 5.0을 반환합니다.

CEIL(5.123) - 6.0을 반환합니다.

  • WIDTH_BUCKET (number1, number2, number3, number4)는 0에서 number4 + 1 사이의 정수를 반환합니다. number2 및 number3 매개변수는 등간격으로 분할된 숫자 세그먼트를 지정하며, 그 수는 숫자 4 매개변수로 지정됩니다. 값이 number1에 속하는 간격의 수를 결정합니다. number1이 지정된 범위를 벗어나면 함수는 0 또는 숫자 4 + 1을 반환합니다. 예를 들면 다음과 같습니다.

WIDTH_BUCKET (3.14, 0, 9, 5) - 2를 반환합니다.

날짜-시간 함수

SQL에는 현재 날짜와 시간을 반환하는 세 가지 함수가 있습니다.

  • CURRENT_DATE - 현재 날짜를 반환합니다(DATE 유형).

예: 2005-06-18.

  • CURRENT_TIME(숫자 ) - 현재 시간을 반환합니다(TIME 유형). 정수 매개변수는 초의 정밀도를 지정합니다. 예를 들어 값이 2이면 초는 100분의 1 단위로 표시됩니다(소수 부분의 두 자리).

12:39:45.27.

  • CURRENT_TIMESTAMP(숫자 ) - 날짜와 시간을 반환합니다(TIMESTAMP 유형). 예를 들어, 2005-06-18 12:39: 45.27. 정수 매개변수는 초의 정밀도를 지정합니다.

이러한 함수에서 반환된 날짜와 시간은 문자가 아닌 유형입니다. 이를 문자열로 표현해야 하는 경우 CAST() 형식의 변환 함수를 사용해야 합니다.

날짜-시간 함수는 일반적으로 쿼리에서 데이터를 삽입, 업데이트 및 삭제하는 데 사용됩니다. 예를 들어, 판매에 대한 정보를 기록할 때 특별히 제공되는 열에 현재 날짜와 시간이 입력됩니다. 월별 또는 분기별 총계를 합산한 후 보고 기간의 판매 데이터를 삭제할 수 있습니다.

평가된 표현식

계산된 표현식은 상수(숫자, 문자열, 논리), 함수, 필드 이름 및 기타 데이터 유형을 산술, 문자열, 논리 및 기타 연산자와 연결하여 작성됩니다. 결과적으로 표현식은 연산자에 의해 더 복잡한(복합) 표현식으로 결합될 수 있습니다. 괄호는 표현식이 평가되는 순서를 제어하는 ​​데 사용됩니다.

논리 연산자 AND, OR 및 NOT 및 기능 이전에 논의되었습니다.

산술 연산자:

  • + - 추가;
  • - - 빼기;
  • * - 곱셈;
  • / - 분할.

문자열 연산자하나는 문자열 연결 또는 연결 연산자(| |)입니다. 일부 SQL 구현(예: Microsoft Access)은 (| |) 대신 (+) 기호를 사용합니다. 연결 연산자는 첫 번째 예제 표현식의 끝에 두 번째 줄을 추가합니다.

"사샤" | | "사랑" | | "마샤"

결과적으로 "Sasha는 Masha를 사랑합니다"라는 문자열을 반환합니다.

표현식을 작성할 때 연산자의 피연산자가 유효한 유형인지 확인해야 합니다. 예를 들어, 표현식: 123 + "Sasha"는 산술 더하기 연산자가 문자열 피연산자에 적용되기 때문에 유효하지 않습니다.

평가된 식은 WHERE 및 HAVI 절의 조건식뿐만 아니라 SELECT 문 뒤에 나타날 수 있습니다. NG.

몇 가지 예를 살펴보겠습니다.

Sales 테이블에 Item_type, Quantity 및 Price 열이 있고 각 제품 유형에 대한 수익을 알아야 한다고 가정합니다. 이렇게 하려면 SELECT 문 다음의 열 목록에 Quantity * Price 표현식을 포함하는 것으로 충분합니다.

SELECT Item_type, 수량, 가격, 수량 * 가격처럼

총 판매액;

AS(as) 키워드를 사용하여 계산된 데이터 열의 별칭을 지정합니다.

그림에서. 10은 원래 Sales 테이블과 결과 쿼리 테이블을 보여줍니다.

쌀. 10. 제품 유형별 수익 계산 쿼리 결과

모든 상품 판매로 인한 총 수익을 찾아야 하는 경우 다음 쿼리를 적용하면 충분합니다.

합계 선택 (수량 * 가격) FROM 판매;

다음 쿼리에는 열 목록과 WHERE 절 모두에 평가된 식이 포함되어 있습니다. 그는 판매 테이블에서 판매 수익이 1000 이상인 상품을 선택합니다.

SELECT Item_type, 수량 * 가격 AS 합계

판매에서

WHERE 수량 * 가격> 1000;

두 개의 열이 있는 테이블을 얻으려고 한다고 가정합니다.

제품 유형 및 가격이 포함된 제품

총 포함 수익입니다.

원래 판매 테이블에서 Item_type 열은 문자(CHAR 유형)이고 Price 열은 숫자라고 가정하므로 이러한 열의 데이터를 병합(접착)할 때 CAST를 사용하여 숫자 유형을 문자로 캐스트해야 합니다. () 기능. 이 작업을 수행하는 쿼리는 다음과 같습니다(그림 11).

항목 유형 선택 | | "(가격:" | | CAST (가격 AS CHAR (5)) | | ")" AS 제품, 수량 * 가격 AS 합계

판매에서;

쌀. 11. 하나의 컬럼에 서로 다른 유형의 데이터를 결합한 쿼리 결과

메모. Microsoft Access에서 유사한 쿼리는 다음과 같습니다.

SELECT Item_type + "(가격:" + C스트 (가격) + ")" AS 제품,

수량 * 가격 AS 합계

판매에서;

CASE 문이 있는 조건식

일반 프로그래밍 언어에는 특정 조건이 충족되는지 여부에 따라 계산 프로세스를 제어할 수 있는 조건부 점프 연산자가 있습니다. SQL에서 이러한 명령문은 CASE(사건, 상황, 사례). SQL: 2003에서 이 연산자는 값을 반환하므로 표현식에 사용할 수 있습니다. 두 가지 주요 형식이 있으며 이 섹션에서 살펴보겠습니다.

값이 있는 CASE 문

값이 있는 CASE 문에는 다음 구문이 있습니다.

CASE check_value

WHEN 값 1 다음 결과 1

WHEN 값 2 다음 결과 2

. . .

WHEN 값 N THEN 결과 N

ELSE 결과 X

경우에 checked_value값1과 동일 , CASE 문은 값을 반환합니다.결과1 키워드 THEN(then) 뒤에 지정됩니다. 그렇지 않으면 checked_value가 다음과 비교됩니다.가치2 , 같으면 result2가 반환됩니다. 그렇지 않으면 확인된 값이 WHEN 키워드(언제) 뒤에 지정된 다음 값과 비교됩니다. checked_value가 이러한 값과 같지 않으면 값이 반환됩니다.결과 X ELSE 키워드 뒤에 지정됩니다(그렇지 않으면).

ELSE 키워드는 선택 사항입니다. 존재하지 않고 비교할 값이 테스트된 값과 같지 않으면 CASE 문은 NULL을 반환합니다.

고객 테이블(그림 1 참조)을 기반으로 지역 이름이 해당 코드 번호로 대체된 테이블을 원한다고 가정합니다. 초기 테이블에 다른 영역이 너무 많지 않은 경우 이 문제를 해결하려면 CASE 연산자와 함께 쿼리를 사용하는 것이 편리합니다.

이름, 주소,

케이스 지역

"모스크바" 다음 "77"일 때

WHEN "트베리 지역" THEN "69"

. . .

ELSE 지역

AS 지역 코드

클라이언트에서;

검색어가 포함된 CASE 문

CASE 연산자의 두 번째 형식은 테이블에서 특정 조건을 충족하는 레코드를 검색할 때 사용한다고 가정합니다.

사례

WHEN 조건1 THEN 결과1

결과 2 다음 결과 2

. . .

WHEN 조건 N THEN 결과 N

ELSE 결과 X

CASE 문은 WHERE 절로 지정된 세트의 첫 번째 레코드에 대해 condition1이 true인지 확인하거나 WHERE가 없는 경우 전체 테이블에서 true인지 확인합니다. 그렇다면 CASE는 result1을 반환합니다. 그렇지 않으면 이 레코드에 대해 조건 2가 확인됩니다. true이면 result2 값이 반환되고, 조건이 충족되지 않으면 값이 반환됩니다.엑스 키워드 ELSE 뒤에 지정됩니다.

ELSE 키워드는 선택 사항입니다. 존재하지 않고 조건이 충족되지 않으면 CASE 문은 NULL을 회전합니다. CASE가 포함된 명령문이 첫 번째 레코드에 대해 실행된 후 다음 레코드로 이동합니다. 이것은 전체 레코드 집합이 처리될 때까지 계속됩니다.

예를 들어 책 테이블(Title, Price)에서 해당 책을 사용할 수 없는 경우 열은 NULL입니다. 다음 쿼리는 NULL 대신 "재고 없음"이라는 텍스트를 표시하는 테이블을 반환합니다.

이름 선택,

사례

가격이 NULL인 경우 "재고 없음"

ELSE CAST(Char (8) 가격)

AS 가격

책에서;

동일한 열의 모든 값은 동일한 유형이어야 합니다. 따라서 에서 이 요청 CAST 유형 변환 함수는 Price 열의 숫자 값을 문자 유형으로 캐스트하는 데 사용됩니다.

CASE 문의 첫 번째 형식 대신 항상 두 번째 형식을 사용할 수 있습니다.

사례

WHEN test_value = value1 다음 결과1

WHEN test_value = value2 다음 result2

. . .

WHEN checked_value = 값 N 그 다음 결과N

ELSE 결과X

NULLIF 및 COALESCE 함수

경우에 따라 특히 데이터 업데이트 쿼리(UPDATE 문)에서는 번거로운 CASE 문 대신 NULLIF()(NULL if) 및 COALESCE()(결합) 함수를 사용하는 것이 편리합니다.

NULLIF 함수( 값1, 값2) 첫 번째 매개변수의 값이 두 번째 매개변수의 값과 일치하면 NULL을 반환하고 일치하지 않으면 첫 번째 매개변수의 값을 변경하지 않고 반환합니다. 즉, 동등 value1 = value2가 충족되면 함수는 NULL을 반환하고, 그렇지 않으면 - value1을 반환합니다.

이 함수는 다음 두 가지 형식의 CASE 문과 동일합니다.

  • 케이스 값1

때 값2 THEN NULL

ELSE 값1

  • 사례

때 값1 = 값2 THEN NULL

ELSE 값1

합치기 함수( 값1, 값2, ...,값 N) 확정적이거나 null일 수 있는 값 목록을 허용합니다. 이 함수는 목록에서 특정 값을 반환하거나 모든 값이 정의되지 않은 경우 NULL을 반환합니다.

이 함수는 다음 CASE 문과 동일합니다.

사례

값 1이 NULL이 아닐 때 값 1

값 2가 NULL이 아닐 때 값 2

. . .

WHEN 값 N IS NOT NULL THEN 값 N

ELSE NULL

예를 들어 Books(Title, Price) 테이블에서 해당 책을 사용할 수 없는 경우 Price 열은 NULL입니다. 다음 쿼리는 대신 다음을 포함하는 테이블을 반환합니다.없는 "재고 없음" 텍스트가 표시됩니다.

SELECT 이름, COALESCE(CAST(Price AS CHAR(8)),

"재고 없음") AS 가격

책에서;

SQL 11단원. 요약 함수, 계산된 열 및 보기

요약 함수는 통계, 집계 또는 요약 함수라고도 합니다. 이러한 함수는 행 집합을 처리하여 단일 값을 계산하고 반환합니다. 다음과 같은 5가지 기능만 있습니다.
  • AVG() 함수는 열의 평균 값을 반환합니다.

  • COUNT() 함수는 열의 행 수를 반환합니다.

  • MAX() 이 함수는 가장 많은 값을 반환합니다. 큰 중요성열에서.

  • MIN() 함수는 열에서 가장 작은 값을 반환합니다.

  • SUM() 함수는 열 값의 합계를 반환합니다.

우리는 이미 수업 8에서 그 중 하나인 COUNT()를 만났습니다. 이제 나머지에 대해 알아보도록 하겠습니다. 우리 가게에 있는 책의 최소, 최대, 평균 가격을 알고 싶다고 가정해 봅시다. 그런 다음 가격(가격) 테이블에서 가격 열의 최소값, 최대값 및 평균값을 가져와야 합니다. 요청은 간단합니다.

SELECT MIN(가격), MAX(가격), AVG(가격) FROM 가격;

이제 "Printing House" 공급자가 우리에게 상품을 얼마나 가져왔는지(id = 2) 알아내고 싶습니다. 그러한 요청을 작성하는 것은 그리 쉬운 일이 아닙니다. 그것을 구성하는 방법에 대해 생각해 봅시다.

1. 먼저 배송(수신) 테이블에서 "인쇄소" 공급업체(id = 2)가 수행한 배송의 식별자(id_incoming)를 선택합니다.

2. 이제 테이블 매거진 배달(magazine_incoming)에서 단락 1에서 찾은 배달에서 수행된 상품(id_product)과 수량(수량)을 선택해야 합니다. 즉, 단락 1의 요청이 중첩됩니다.

3. 이제 검색된 제품의 가격을 결과 테이블에 추가해야 하며 이는 가격 테이블에 저장됩니다. 즉, id_product 열을 기준으로 Magazine_incoming 및 Price 테이블을 조인해야 합니다.

4. 결과 테이블에는 Sum 열이 분명히 부족합니다. 계산된 열... 이러한 열을 생성하는 기능은 MySQL에서 제공됩니다. 이렇게 하려면 쿼리에서 계산된 열의 이름과 계산할 대상을 지정하기만 하면 됩니다. 이 예에서 이러한 열은 summa라고 하며 수량 및 가격 열의 곱을 계산합니다. 새 열 이름은 AS라는 단어로 구분됩니다.

SELECT Magazine_incoming.id_product, magazine_incoming.quantity, price.price, magazine_incoming.quantity * price.price AS summa FROM magazine_incoming, 가격 WHERE magazine_incoming.id_product = price.id_product AND id_incoming = (SELECT id_incoming FROM 수신 WHERE 2 id_vendor

5. 좋습니다. 우리가 해야 할 일은 요약 열을 요약하고 마침내 "Printing House" 공급자가 우리에게 상품을 얼마나 가져왔는지 알아내는 것입니다. SUM() 함수를 사용하는 구문은 다음과 같습니다.

SELECT SUM(column_name) FROM table_name;

우리는 열의 이름인 summa를 알고 있지만 쿼리의 결과이기 때문에 테이블 이름이 없습니다. 무엇을 할까요? 이러한 경우 MySQL은 보기를 제공합니다. 보기는 고유한 이름이 할당되고 나중에 사용하기 위해 데이터베이스에 저장할 수 있는 선택 쿼리입니다.

보기를 만드는 구문은 다음과 같습니다.

CREATE VIEW view_name AS 쿼리;

report_vendor라는 뷰로 요청을 저장해 보겠습니다.

CREATE VIEW report_vendor AS SELECT magazine_incoming.id_product, magazine_incoming.quantity, price.price, magazine_incoming.quantity * price.price AS summa FROM magazine_incoming, 가격 WHERE magazine_incoming.id_product = price.id_product AND id_incoming = (FROMECT id_incoming.id_incoming WHERE ;

6. 이제 최종 SUM() 함수를 사용할 수 있습니다.

SELECT SUM(합계) FROM report_vendor;

따라서 결과를 얻었지만 이를 위해서는 중첩 쿼리, 조인, 계산된 열 및 보기를 사용해야 했습니다. 예, 때로는 아무데도 없이 결과를 얻기 위해 생각해야 합니다. 그러나 우리는 계산된 열과 보기라는 두 가지 매우 중요한 주제를 다루었습니다. 그들에 대해 더 자세히 이야기합시다.

계산된 필드(열)

예를 사용하여 오늘 수학적 계산 필드를 살펴보았습니다. 여기에 곱하기(*)뿐만 아니라 빼기(-), 더하기(+), 나누기(/) 연산도 사용할 수 있다는 점을 덧붙이고 싶습니다. 구문은 다음과 같습니다.

SELECT column_1_name, column_2_name, column_1_name * column_2_name AS computed_column_name FROM table_name;

두 번째 뉘앙스는 AS 키워드로 계산된 열의 이름을 설정하는 데 사용했습니다. 실제로 이 키워드는 모든 열에 대한 별칭을 설정하는 데 사용됩니다. 이것이 왜 필요한가? 더 짧고 읽기 쉬운 코드를 위해. 예를 들어 보기는 다음과 같을 수 있습니다.

CREATE VIEW report_vendor AS SELECT A.id_product, A.quantity, B.price, A.quantity * B.price AS summa FROM magazine_incoming AS A, 가격 AS B WHERE A.id_product = B.id_product AND id_incoming = (SELECT id_incoming FROM 수신 어디에 id_vendor = 2);

이것이 훨씬 더 짧고 명확하다는 데 동의하십시오.

대표

뷰 생성 구문을 이미 다뤘습니다. 뷰를 생성한 후에는 테이블과 같은 방식으로 사용할 수 있습니다. 즉, 쿼리를 실행하고, 데이터를 필터링 및 정렬하고, 일부 보기를 다른 보기와 결합합니다. 한편으로는 매우 편리한 방법자주 사용하는 보관 복잡한 쿼리(우리의 예에서와 같이).

그러나 보기는 테이블이 아닙니다. 즉, 데이터를 저장하지 않고 다른 테이블에서 검색하기만 합니다. 따라서 먼저 테이블의 데이터가 변경되면 프레젠테이션 결과도 변경됩니다. 그리고 두 번째로 뷰에 질의를 하면 필요한 데이터를 검색하게 되는데, 즉 DBMS의 성능이 저하된다. 따라서 학대해서는 안됩니다.

이 튜토리얼은 사용법을 보여줄 것입니다 합 함수 V SQL 서버(Transact-SQL) 구문 및 예제.

설명

SQL 서버(Transact-SQL) 합 함수표현식의 총 값을 반환합니다.

통사론

SQL Server(Transact-SQL)의 SUM 함수 구문은 다음과 같습니다.

또는 결과를 하나 이상의 열로 그룹화할 때 SUM 함수의 구문은 다음과 같습니다.

매개변수 또는 인수

expression1, expression2, ...expression_n은 SUM 함수에 포함되지 않은 표현식으로, SQL 문의 마지막 GROUP BY 절에 포함되어야 합니다.
Aggregate_expression은 요약할 열 또는 표현식입니다.
테이블 - 레코드를 가져오려는 테이블. FROM 절에 나열된 테이블이 하나 이상 있어야 합니다.
WHERE 조건은 선택 사항입니다. 선택한 레코드에 대해 충족해야 하는 조건입니다.

애플리케이션

SUM 함수는 다음 버전의 SQL Server(Transact-SQL)에서 사용할 수 있습니다.
SQL Server vNext, SQL Server 2016, SQL Server 2015, SQL Server 2014, SQL Server 2012, SQL Server 2008 R2, SQL Server 2008, SQL Server 2005

단일 필드 예

SQL Server(Transact-SQL)에서 SUM 함수를 사용하는 방법을 이해하기 위해 몇 가지 SQL Server SUM 함수 예제를 살펴보겠습니다.

예를 들어 개수가 10보다 큰 모든 제품의 합계가 어떻게 되는지 알 수 있습니다.

SUM 함수의 이 예에서는 SUM(수량) 표현식을 "Total Quantity" 별칭으로 설정합니다. 결과 집합을 반환할 때 - "총 수량"이 필드 이름으로 표시됩니다.

DISTINCT 사용 예

SUM 함수에서 DISTINCT 연산자를 사용할 수 있습니다. 예를 들어 아래에 주어진 SQL 문연봉이 $29,000 미만인 경우 고유한 급여 값이 있는 총 급여를 반환합니다.

두 급여가 연간 $ 24,000라면 이 값 중 하나만 SUM 함수에 사용됩니다.

수식 사용 예

SUM 함수에 포함된 표현식은 단일 필드일 필요가 없습니다. 공식을 사용할 수도 있습니다. 예를 들어 총 수수료를 계산할 수 있습니다.

Transact-SQL

SELECT SUM (sales * 0.03) AS "Total Commission" FROM 주문;

SELECT SUM (매출 * 0.03) AS "총 수수료"

주문에서;

GROUP BY 사용 예

경우에 따라 SUM 함수와 함께 GROUP BY 절을 사용해야 합니다.

특정 공급업체에서 생산한 PC 모델 수를 어떻게 알 수 있습니까? 동일한 컴퓨터의 평균 가격을 결정하는 방법 명세서? 일부 통계 정보와 관련된 이러한 질문과 기타 많은 질문은 다음을 사용하여 답변할 수 있습니다. 요약(집계) 함수... 이 표준은 다음 집계 기능을 제공합니다.

이러한 모든 함수는 단일 값을 반환합니다. 이 경우 기능은 카운트, 분그리고 최대모든 데이터 유형에 적용할 수 있지만 합집합그리고 AVG숫자 필드에만 사용됩니다. 기능의 차이점 세다 (*)그리고 세다 (<имя поля>) 두 번째는 계산할 때 NULL 값을 고려하지 않는다는 것입니다.

예시. 개인용 컴퓨터의 최소 및 최대 가격 찾기:

예시. 제조업체 A에서 사용할 수 있는 컴퓨터 수 찾기:

예시. 제조업체 A가 생산한 다양한 모델의 수에 관심이 있는 경우 쿼리는 다음과 같이 공식화될 수 있습니다(제품 테이블에서 각 모델이 한 번 기록된다는 사실을 사용).

예시. 제조업체 A에서 사용할 수 있는 다른 모델의 수를 찾으십시오. 쿼리는 제조업체 A에서 생산한 총 모델 수를 결정하는 데 필요한 이전 쿼리와 유사합니다. 여기에서 다른 모델의 수도 찾아야 합니다. PC 테이블(즉, 상업적으로 이용 가능).

통계 지표를 얻을 때 고유한 값만 사용되도록 하려면 집계 함수의 인수사용할 수 있습니다 DISTINCT 매개변수... 또 다른 매개변수 전체기본값이며 열의 모든 반환 값이 계산된다고 가정합니다. 운영자,

생산된 PC 모델의 수를 구해야 하는 경우 모든제조업체, 당신은 사용해야합니다 GROUP BY 절구문적으로 다음 WHERE 절.

GROUP BY 절

GROUP BY 절적용할 수 있는 출력 라인 그룹을 정의하는 데 사용 집계 함수(COUNT, MIN, MAX, AVG 및 SUM)... 이 절이 누락되고 집계 함수가 사용되면 에 언급된 이름을 가진 모든 열이 선택하다에 포함되어야 합니다 집계 함수, 그리고 이러한 함수는 쿼리 조건자를 충족하는 전체 행 집합에 적용됩니다. 그렇지 않으면 SELECT 목록의 모든 열, 포함되지집계 함수에서 지정해야 합니다. GROUP BY 절에서... 결과적으로 쿼리의 모든 출력 라인은 이러한 열에서 동일한 값 조합을 특징으로 하는 그룹으로 나뉩니다. 이후에는 각 그룹에 집계 함수가 적용됩니다. GROUP BY의 경우 모든 NULL 값은 동일한 것으로 처리됩니다. NULL 값을 포함하는 필드로 그룹화하면 이러한 모든 행이 하나의 그룹에 속합니다.
만약에 GROUP BY 절이 있는 경우, SELECT 절에서 집계 함수 없음, 쿼리는 단순히 각 그룹에서 하나의 행을 반환합니다. DISTINCT 키워드와 함께 이 기능을 사용하여 결과 집합에서 중복 행을 제거할 수 있습니다.
간단한 예를 살펴보겠습니다.
모델 선택, COUNT(모델) AS Qty_model, AVG(가격) AS Avg_price
PC에서
GROUP BY 모델;

이 요청에서 각 PC 모델에 대해 해당 번호와 평균 비용이 결정됩니다. 동일한 모델 값을 가진 모든 행이 그룹을 형성하고 SELECT 출력은 각 그룹에 대한 값의 수와 평균 가격 값을 계산합니다. 쿼리 결과 다음 테이블이 생성됩니다.
모델 수량_모델 평균 가격
1121 3 850.0
1232 4 425.0
1233 3 843.33333333333337
1260 1 350.0

SELECT에 날짜가 있는 열이 있는 경우 각 특정 날짜에 대해 이러한 표시기를 계산할 수 있습니다. 이렇게 하려면 날짜를 그룹화 열로 추가해야 하며 집계 함수는 각 값 조합(모델-날짜)에 대해 계산됩니다.

몇 가지 특정 집계 기능을 수행하기 위한 규칙:

  • 쿼리의 결과인 경우 수신된 라인이 없습니다(또는 주어진 그룹에 대해 둘 이상의 행), 집계 함수를 계산하기 위한 초기 데이터가 없습니다. 이 경우 COUNT 함수를 실행한 결과는 0이 되고 다른 모든 함수의 결과는 NULL이 됩니다.
  • 논쟁집계 함수 자체적으로 집계 함수를 포함할 수 없음(함수에서 함수). 저것들. 하나의 쿼리에서는 최대 평균값을 얻을 수 없습니다.
  • 실행 결과 COUNT 함수있다 정수(정수). 다른 집계 함수는 처리 중인 값의 데이터 유형을 상속합니다.
  • SUM 함수 실행 시 사용된 데이터 타입의 최대값을 초과하는 결과가 나왔다면, 오류.

따라서 요청에 포함되지 않은 경우 GROUP BY 절, 그 다음에 집계 함수포함 된 SELECT 절, 모든 결과 쿼리 라인에서 실행됩니다. 요청에 포함된 경우 GROUP BY 절, 동일한 열 또는 열 그룹 값이 지정된 각 행 집합 GROUP BY 절, 그룹을 구성하고, 집계 함수각 그룹별로 개별적으로 수행됩니다.

HAVING 절

만약에 WHERE 절행 필터링을 위한 술어를 정의한 다음 제공적용된 그룹화 후값으로 그룹을 필터링하는 유사한 술어 정의 집계 함수... 이 절은 다음을 사용하여 얻은 값을 테스트하는 데 필요합니다. 집계 함수에 정의된 레코드 소스의 별도 라인이 아닌 FROM 절, 그리고 ~에서 그러한 라인의 그룹... 따라서 그러한 수표는 WHERE 절.



관련 기사: