Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 함수 생성으로 특정 열 값의 평균 구하는 방법

MySQL에서는 사용자 정의 함수(Stored Function)를 직접 만들어 특정 조건에 맞는 열 값의 평균을 손쉽게 계산할 수 있습니다. 이 글에서는 예제 테이블을 만들고, 학생별 점수의 평균을 반환하는 함수를 단계별로 작성하는 방법을 알아보겠습니다.

1단계: 테이블 생성하기

먼저 아래 쿼리로 예제 테이블을 생성합니다.

mysql> create table DemoTable638 (Name varchar(100),Marks int);
Query OK, 0 rows affected (0.68 sec)

2단계: 데이터 삽입하기

INSERT 명령을 사용해 테이블에 레코드를 추가합니다.

mysql> insert into DemoTable638 values('John',67);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable638 values('John',90);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable638 values('David',99);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable638 values('John',60);
Query OK, 1 row affected (0.13 sec)

3단계: 저장된 데이터 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable638;

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+-------+-------+
| Name  | Marks |
+-------+-------+
| John  | 67    |
| John  | 90    |
| David | 99    |
| John  | 60    |
+-------+-------+
4 rows in set (0.00 sec)

4단계: 평균을 반환하는 함수 만들기

이제 'John'의 점수 평균을 반환하는 함수를 생성해 보겠습니다. 함수 생성 전에 log_bin_trust_function_creators 설정을 활성화하면 바이너리 로깅 환경에서도 함수를 안전하게 만들 수 있습니다.

mysql> set global log_bin_trust_function_creators=1;
Query OK, 0 rows affected (0.28 sec)
mysql> DELIMITER //
mysql> CREATE FUNCTION getAverageDemo()
    RETURNS INT
    BEGIN DECLARE value INT;
       SELECT AVG(Marks) INTO value from DemoTable638 WHERE Name="John";
       RETURN value;
    END;
    //
Query OK, 0 rows affected (0.35 sec)
mysql> DELIMITER ;

여기서 핵심은 AVG(Marks) 집계 함수를 사용해 조건에 맞는 점수들의 평균을 구하고, 그 결과를 변수에 담아 RETURN

5단계: 함수 호출하여 결과 확인하기

생성한 함수는 SELECT 문으로 간단히 호출할 수 있습니다.

mysql> select getAverageDemo();

실행 결과는 다음과 같습니다.

+------------------+
| getAverageDemo() |
+------------------+
| 72               |
+------------------+
1 row in set (0.01 sec)

'John'의 점수는 67, 90, 60이므로 평균은 (67 + 90 + 60) / 3 = 약 72.33이 되고, 함수가 INT 타입을 반환하기 때문에 최종 결과는 72로 출력됩니다. 소수점까지 필요하다면 RETURNS와 DECLARE의 타입을 DECIMAL이나 FLOAT로 변경하면 됩니다.