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

MySQL에서 양수·음수 값을 기준으로 GROUP BY 쿼리 작성하는 방법

MySQL에서는 GROUP BY 절에 단순히 컬럼명만이 아니라 표현식(expression)도 사용할 수 있습니다. 이를 활용하면 컬럼 값에 음수 부호(-)를 붙인 형태로 그룹화할 수 있습니다.

기본 문법

SELECT 쿼리에서 양수 또는 음수 값을 기준으로 GROUP BY를 수행하는 기본 문법은 다음과 같습니다.

select *from yourTableName group by -yourColumnName;

예제 테이블 생성

먼저 실습에 사용할 테이블을 생성합니다.

mysql> create table DemoTable (Value int);
Query OK, 0 rows affected (0.60 sec)

INSERT 명령을 사용해 몇 개의 레코드를 삽입합니다.

mysql> insert into DemoTable values(-10);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values(-20);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(-10);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(-10);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values(-20);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(-30);
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable values(30);
Query OK, 1 row affected (0.12 sec)

저장된 데이터 확인

SELECT 명령으로 테이블의 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

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

+-------+
| Value |
+-------+
|   -10 |
|   -20 |
|    20 |
|    10 |
|   -10 |
|   -10 |
|   -20 |
|   -30 |
|    30 |
+-------+
9 rows in set (0.00 sec)

양수·음수 값 기준으로 GROUP BY 실행

이제 -Value 표현식을 사용해 그룹화를 수행합니다.

mysql> select *from DemoTable group by -Value;

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

+-------+
| Value |
+-------+
|   -10 |
|   -20 |
|    20 |
|    10 |
|   -30 |
|    30 |
+-------+
6 rows in set (0.00 sec)

동작 원리

GROUP BY -Value는 각 행의 값에 음수 부호를 적용한 결과를 기준으로 그룹을 형성합니다. 예를 들어 -1010으로, 20-20으로 변환된 후 동일한 값끼리 하나의 그룹으로 묶입니다. 위 예제에서는 중복된 값(-10 3건, -20 2건)이 제거되어 총 9개 행이 6개 그룹으로 그룹화되었습니다.

참고로, GROUP BY와 함께 SELECT *를 사용하면 각 그룹별로 대표 행 하나씩만 반환됩니다. 특정 그룹의 집계 값이 필요하다면 COUNT(), SUM() 같은 집계 함수를 함께 사용하는 것이 좋습니다.