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

MySQL에서 열 값별 고정된 문자 수에 맞춰 임의 레코드 3개 선택하는 방법

MySQL에서 각기 다른 고정된 문자 수 조건에 맞는 레코드를 무작위로 추출하려면 CHAR_LENGTH() 함수와 RAND() 함수를 함께 활용할 수 있습니다. CHAR_LENGTH()는 문자열의 길이를 반환하고, RAND()는 무작위 정렬을 위해 사용됩니다.

실제 동작 과정을 예제를 통해 단계별로 살펴보겠습니다.

1. 테이블 생성

먼저 테이블을 생성합니다.

mysql> create table DemoTable (Subject text);
Query OK, 0 rows affected (0.61 sec)

2. 샘플 데이터 삽입

insert 명령어를 사용해 여러 개의 레코드를 삽입합니다.

mysql> insert into DemoTable values('C');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('MySQL');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Java');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('MongoDB');
Query OK, 1 row affected (0.59 sec)
mysql> insert into DemoTable values('RubyOnRails');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable values('C++');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Python');
Query OK, 1 row affected (0.20 sec)

3. 전체 레코드 조회

select 문으로 테이블의 모든 레코드를 확인합니다.

mysql> select *from DemoTable;

출력 결과

+-------------+
| Subject     |
+-------------+
| C           |
| MySQL       |
| Java        |
| MongoDB     |
| RubyOnRails |
| C++         |
| Python      |
+-------------+
7 rows in set (0.00 sec)

4. 고정된 문자 수 조건으로 임의 레코드 3개 선택

다음은 각각 다른 문자 수(7자, 11자, 5자) 조건에 맞는 레코드를 하나씩 무작위로 선택하는 쿼리입니다. 서브쿼리마다 WHERE 절에서 CHAR_LENGTH()로 길이를 필터링한 뒤, ORDER BY RAND()와 LIMIT 1로 무작위 레코드 하나를 추출하고 UNION으로 결합합니다.

mysql> select *from
(select *from DemoTable WHERE CHAR_LENGTH(Subject) = 7 ORDER BY RAND() LIMIT 1 ) tbl
UNION
(select *from DemoTable WHERE CHAR_LENGTH(Subject) = 11 ORDER BY RAND() LIMIT 1 )
UNION
(select *from DemoTable WHERE CHAR_LENGTH(Subject) = 5 ORDER BY RAND() LIMIT 1 );

출력 결과

+-------------+
| Subject     |
+-------------+
| MongoDB     |
| RubyOnRails |
| MySQL       |
+-------------+
3 rows in set (0.04 sec)

이처럼 CHAR_LENGTH()와 RAND()를 조합하면 특정 문자 길이 조건을 만족하는 레코드를 각각 무작위로 손쉽게 추출할 수 있습니다. 필요에 따라 문자 수 조건과 UNION 개수를 자유롭게 조절하여 다양한 형태의 무작위 샘플링 쿼리를 작성할 수 있습니다.