이 글이 필요한 사람
컴활 1급 데이터베이스 실기에서 DMax, DMin, DAvg가 보이면 함수 선택보다 따옴표와 조건식부터 세다가 막히는 사람에게 맞는 글입니다.
기존 `DLookup·DCount·DSum 차이` 글은 값 하나·개수·합계를 맡습니다. 이 글은 최댓값·최솟값·평균 선택과 Max·Min·Avg 총계 함수와의 경계만 담당합니다.
도메인 함수의 공통 인수 구조는 같지만 결과 의미는 다릅니다. 문제 문장의 `가장 큰`, `가장 작은`, `평균`을 먼저 표시하면 함수 이름을 빠르게 확정할 수 있습니다.
두음 암기부터 잡으세요: 맥대·민소·애평
`맥대`는 DMax가 최대, `민소`는 DMin이 최소, `애평`은 DAvg가 평균이라는 뜻입니다. 영어 이름과 결과를 한 쌍으로 붙인 암기입니다.
그 뒤에 `식도조`를 붙이세요. Expr은 계산할 필드·식, Domain은 테이블·쿼리, Criteria는 조건입니다. 최종 암기는 `맥대·민소·애평, 식도조`입니다.
함수 선택과 인수 해석을 한 번에 하지 마세요. 먼저 대·소·평으로 함수를 정하고, 그다음 무엇을·어디서·어떤 조건으로 계산할지 채우는 순서가 안정적입니다.
공통 구문은 Expr·Domain·Criteria입니다
Microsoft Learn의 공식 구문은 DMax, DMin, DAvg 모두 `expression.함수(Expr, Domain, Criteria)`입니다. Access 계산 컨트롤에서는 보통 `=DMax("[필드]", "테이블", "조건")` 같은 식으로 봅니다.
Expr은 최대·최소·평균을 계산할 필드나 계산식입니다. Domain은 계산 대상 레코드 집합인 테이블 또는 매개 변수가 필요 없는 쿼리 이름입니다.
Criteria는 계산할 레코드를 좁히는 선택 조건이며 SQL WHERE 절에서 WHERE를 뺀 형태입니다. Criteria를 생략하면 Expr을 Domain 전체 레코드에 대해 계산합니다.
DMax는 조건에 맞는 가장 큰 값을 찾습니다
DMax는 지정한 Domain에서 Criteria를 만족하는 레코드의 Expr 최댓값을 반환합니다. 예를 들어 서울 지역의 최고 판매액은 `=DMax("[판매액]", "판매", "[지역] = '서울'")`처럼 만들 수 있습니다.
Microsoft Learn은 숫자 Expr이면 숫자 최댓값을 반환하고, 문자 Expr이면 알파벳 정렬상 마지막 값을 반환할 수 있다고 설명합니다. 컴활 문제에서는 지시문이 요구한 필드 자료형과 결과를 함께 확인하세요.
최신 날짜를 찾는 문제도 날짜 필드의 최댓값이라는 관점으로 DMax를 사용할 수 있습니다. 다만 Criteria의 날짜값을 비교할 때는 날짜 구분 기호 #을 정확히 둡니다.
DMin은 조건에 맞는 가장 작은 값을 찾습니다
DMin은 지정한 Domain에서 Criteria를 만족하는 레코드의 Expr 최솟값을 반환합니다. 특정 분류의 최저 가격, 가장 이른 날짜, 최소 배송비 같은 지시문에서 먼저 봅니다.
예를 들어 A등급 상품의 최저 단가는 `=DMin("[단가]", "상품", "[등급] = 'A'")`처럼 구성할 수 있습니다. DMax와 인수 자리는 같고 결과 방향만 반대입니다.
문제에 `최소`, `가장 낮은`, `가장 이른` 같은 표현이 나오면 DMin 후보를 표시하세요. 날짜에서는 이른 날짜가 작은 날짜값이라는 점까지 연결하면 선택이 빨라집니다.
DAvg는 조건 범위의 산술 평균을 구합니다
DAvg는 지정한 Domain에서 Criteria를 만족하는 레코드의 숫자 Expr 평균을 계산합니다. 예를 들어 영업부의 평균 실적은 `=DAvg("[실적]", "사원", "[부서] = '영업부'")`처럼 만들 수 있습니다.
Microsoft Learn에 따르면 평균 대상 필드의 Null 값이 들어 있는 레코드는 평균 계산에 포함되지 않습니다. Null을 0점으로 간주해 분모에 넣는 계산과는 결과가 다를 수 있습니다.
DAvg는 평균값을 보여 주는 계산 컨트롤이나 평균보다 큰 레코드를 찾는 쿼리 조건에도 사용할 수 있습니다. 문제의 결과 위치가 컨트롤인지 쿼리 조건인지 먼저 확인하세요.
숫자·문자·날짜 조건은 최종 문자열로 검토합니다
숫자 조건은 `"[부서코드] = 7"`처럼 숫자값에 별도 따옴표를 붙이지 않습니다. 폼 컨트롤 값을 붙이면 `"[부서코드] = " & Me!txt부서코드`처럼 문자열 밖에서 연결합니다.
문자 조건은 최종 값이 작은따옴표 안에 있어야 합니다. `"[지역] = '서울'"` 또는 `"[지역] = '" & Me!txt지역 & "'"`처럼 최종 결과가 `[지역] = '서울'`로 읽혀야 합니다.
날짜 조건은 #으로 감쌉니다. `"[주문일] >= #" & Me!txt기준일 & "#"`처럼 만든 뒤 최종 문자열에 날짜 앞뒤 #이 남는지 확인하세요.
DMax·DMin·DAvg와 Max·Min·Avg의 쓰임을 나누세요
D가 붙은 함수는 Domain과 Criteria를 직접 지정해 다른 테이블·쿼리의 조건 범위를 계산할 수 있습니다. 계산 컨트롤이나 쿼리 식에서 별도 도메인을 참조할 때 유용합니다.
Microsoft Learn은 총계 쿼리에서 DMax·DMin·DAvg를 쓰면 그룹화 전에 값이 평가되고, Max·Min·Avg를 쓰면 데이터가 그룹화된 뒤 필드 식의 값이 계산된다고 설명합니다.
단순히 현재 총계 그룹의 최대·최소·평균을 구하라는 문제라면 Max·Min·Avg가 자연스러울 수 있습니다. 별도 테이블·조건 범위를 직접 지정해야 한다면 D 함수 구조를 먼저 봅니다.
Null과 조건 없음은 숫자 0과 다릅니다
Microsoft Learn에 따르면 DMax와 DMin은 Expr의 Null 값을 무시하며, 조건에 맞는 레코드가 없거나 Domain이 비어 있으면 Null을 반환합니다. DAvg도 평균 대상의 Null 레코드를 계산에서 제외합니다.
화면에서 값이 없을 때 0을 표시해야 한다면 `Nz(DMax(...), 0)` 같은 처리를 검토할 수 있습니다. 하지만 값 없음과 실제 숫자 0이 같은 의미인지 지시문을 먼저 확인해야 합니다.
예상과 다르게 Null이 나오면 함수부터 바꾸지 마세요. Criteria 필드가 Domain에 있는지, 실제 일치 레코드가 있는지, 문자·날짜 구분 기호가 맞는지 순서대로 확인합니다.
시험 직전에는 오류 제거 순서를 6줄로 남기세요
첫째, 두음은 `맥대·민소·애평`입니다. 둘째, 공통 인수는 `식도조`, Expr·Domain·Criteria입니다. 셋째, Criteria는 WHERE 없는 조건 문자열입니다.
넷째, 숫자는 그대로, 문자는 작은따옴표, 날짜는 #입니다. 다섯째, Criteria를 생략하면 Domain 전체를 계산합니다. 여섯째, 결과 없음과 Null은 숫자 0과 다릅니다.
마지막으로 문제 문장에서 가장 큰·가장 작은·평균을 먼저 표시하고, 식도조 세 칸을 채운 뒤 최종 Criteria 문자열을 읽어 보세요. 함수 이름과 따옴표를 동시에 고민하는 시간을 줄일 수 있습니다.