Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

빈 테이블에 대한 "SELECT max(rank) FROM 테스트"의 null 결과를 피하는 방법은 무엇입니까?

<시간/>

이를 위해 집계 함수 MAX()와 함께 COALESCE()를 사용할 수 있습니다.

구문은 다음과 같습니다.

SELECT COALESCE(MAX(`yourColumnName`), 0) FROM yourTableName;

위의 구문을 이해하기 위해 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.

mysql> create table avoidNullDemo
   -> (
   -> `rank` int
   -> );
Query OK, 0 rows affected (0.53 sec)

삽입 명령을 사용하여 테이블에 일부 레코드를 삽입하십시오.

쿼리는 다음과 같습니다

mysql> insert into avoidNullDemo values(10);
Query OK, 1 row affected (0.20 sec)
mysql> insert into avoidNullDemo values(NULL);
Query OK, 1 row affected (0.18 sec)
mysql> insert into avoidNullDemo values(20);
Query OK, 1 row affected (0.17 sec)
mysql> insert into avoidNullDemo values(NULL);
Query OK, 1 row affected (0.11 sec)
mysql> insert into avoidNullDemo values(100);
Query OK, 1 row affected (0.11 sec)
mysql> insert into avoidNullDemo values(NULL);
Query OK, 1 row affected (0.16 sec)

select 문을 사용하여 테이블의 모든 레코드를 표시합니다.

쿼리는 다음과 같습니다

mysql> select *from avoidNullDemo;

다음은 NULL 값이 있는 출력입니다.

+------+
| rank |
+------+
| 10   |
| NULL |
| 20   |
| NULL |
| 100  |
| NULL |
+------+
6 rows in set (0.00 sec)

다음은 null 결과를 피하기 위한 쿼리입니다.

mysql> select COALESCE(MAX(`rank`), 0) FROM avoidNullDemo;

다음은 출력입니다.

+--------------------------+
| COALESCE(MAX(`rank`), 0) |
+--------------------------+
| 100                      |
+--------------------------+
1 row in set (0.00 sec)

테이블이 비어있는 경우입니다.

위의 테이블에서 모든 레코드를 삭제합시다.

쿼리는 다음과 같습니다

mysql> truncate table avoidNullDemo;
Query OK, 0 rows affected (0.92 sec)

이제 위의 테이블은 비어 있습니다. 빈 테이블에 대해 위의 쿼리를 구현해 보겠습니다.

mysql> select COALESCE(MAX(`rank`), 0) FROM avoidNullDemo;

다음은 출력입니다.

+--------------------------+
| COALESCE(MAX(`rank`), 0) |
+--------------------------+
| 0                        |
+--------------------------+
1 row in set (0.00 sec)