동일 ID의 여러 행에서 각 컬럼의 최댓값을 구하려면 GROUP BY ID와 MAX(컬럼)을 사용합니다.
테이블 생성 및 데이터 삽입
mysql> CREATE TABLE DemoTable1804 (
-> Id INT,
-> Marks1 INT,
-> Marks2 INT,
-> Marks3 INT
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO DemoTable1804 VALUES(1,56,89,34); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO DemoTable1804 VALUES(1,98,NULL,94); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO DemoTable1804 VALUES(2,34,45,78); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO DemoTable1804 VALUES(2,NULL,67,NULL); Query OK, 1 row affected (0.00 sec)
데이터 조회
mysql> SELECT * FROM DemoTable1804;
+------+--------+--------+--------+ | Id | Marks1 | Marks2 | Marks3 | +------+--------+--------+--------+ | 1 | 56 | 89 | 34 | | 1 | 98 | NULL | 94 | | 2 | 34 | 45 | 78 | | 2 | NULL | 67 | NULL | +------+--------+--------+--------+ 4 rows in set (0.00 sec)
ID별 각 점수 컬럼의 최댓값
mysql> SELECT Id, MAX(Marks1), MAX(Marks2), MAX(Marks3)
-> FROM DemoTable1804
-> GROUP BY Id;
+------+-------------+-------------+-------------+ | Id | MAX(Marks1) | MAX(Marks2) | MAX(Marks3) | +------+-------------+-------------+-------------+ | 1 | 98 | 89 | 94 | | 2 | 34 | 67 | 78 | +------+-------------+-------------+-------------+ 2 rows in set (0.00 sec)
특징: MAX()는 NULL을 무시합니다. Id=1의 Marks2: 89 vs NULL → 89. Id=2의 Marks1: 34 vs NULL → 34. MIN(), SUM(), AVG()도 NULL 무시. COUNT(컬럼)도 NULL 제외, COUNT(*)는 NULL 포함.