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

MySQL에서 고유한 성(last name)을 가진 모든 사용자 조회하기

MySQL에서 고유한(중복되지 않는) 성(last name)을 가진 모든 사용자를 찾으려면 GROUP BY 절과 HAVING COUNT() 함수를 함께 사용하면 됩니다. 이 방법은 특정 성이 테이블 내에서 한 번만 등장하는 경우를 필터링할 때 유용합니다.

먼저 예제에 사용할 테이블을 생성해 보겠습니다.

테이블 생성 예제

mysql> create table demo76
    -> (
    -> firstName varchar(20),
    -> lastName varchar(20)
    -> );
Query OK, 0 rows affected (9.29 sec)

다음으로 INSERT 명령을 사용하여 테이블에 몇 개의 레코드를 삽입합니다.

데이터 삽입 예제

mysql> insert into demo76 values('John','Doe');
Query OK, 1 row affected (2.52 sec)

mysql> insert into demo76 values('David','Smith');
Query OK, 1 row affected (6.31 sec)

mysql> insert into demo76 values('Adam','Smith');
Query OK, 1 row affected (1.52 sec)

SELECT 문을 사용하여 테이블의 레코드를 확인합니다.

데이터 조회 예제

mysql> select *from demo76;

위 쿼리는 다음과 같은 결과를 출력합니다.

출력 결과

+-----------+----------+
| firstName | lastName |
+-----------+----------+
| John      | Doe      |
| David     | Smith    |
| Adam      | Smith    |
+-----------+----------+
3 rows in set (0.00 sec)

삽입된 데이터를 보면 'Smith'라는 성은 David와 Adam 두 명이 공유하고 있고, 'Doe'라는 성은 John 한 명만 가지고 있습니다. 따라서 고유한 성을 가진 사용자는 John뿐입니다.

이제 고유한 성을 가진 모든 사용자를 찾는 실제 쿼리를 살펴보겠습니다.

고유한 성을 가진 사용자 찾기 쿼리

mysql> select max(tbl.firstName), tbl.lastName,
    -> count(distinct tbl.firstName) as CountOfFirstName
    -> from demo76 as tbl
    -> group by tbl.lastName
    -> having count(distinct tbl.firstName) = 1;

쿼리 동작 방식을 간단히 설명하면 다음과 같습니다.

  • GROUP BY tbl.lastName: 성(lastName)을 기준으로 데이터를 그룹화합니다.
  • COUNT(DISTINCT tbl.firstName): 각 그룹 내에서 서로 다른 이름(first name)의 개수를 계산합니다.
  • HAVING ... = 1: 이름이 하나뿐인 그룹, 즉 해당 성을 가진 사용자가 오직 한 명인 경우만 필터링합니다.

위 쿼리는 다음과 같은 결과를 출력합니다.

출력 결과

+--------------------+----------+------------------+
| max(tbl.firstName) | lastName | CountOfFirstName |
+--------------------+----------+------------------+
| John               | Doe      |                1 |
+--------------------+----------+------------------+
1 row in set (0.00 sec)

결과를 보면 'Doe'라는 성을 가진 John만 출력된 것을 확인할 수 있습니다. 'Smith'는 두 명의 사용자가 공유하고 있어 HAVING 조건에 의해 제외되었습니다. 이처럼 GROUP BY와 HAVING COUNT()를 조합하면 중복 여부에 따른 데이터를 손쉽게 필터링할 수 있습니다.