HOWTO · MySQL

MySQL에서 Datetime 열만 날짜별로 그룹화

이 자습서는 MySQL에서만 datetime 유형 열을 날짜별로 그룹화하는 방법에 대해 교육합니다.

이 페이지의 내용

이 자습서에서는 GROUP BY 절, COUNT() 및 DATE() 함수를 사용하여 MySQL에서만 DATE 유형 열을 DATE로 그룹화합니다.

GROUP BY, COUNT() 및 DATE()를 사용하여 DATE 열을 DATE로 그룹화

계속 진행하기 전에 DATETIME 값은 YYYY-MM-DD hh:mm:ss 형식이고 DATE 값은 YYYY-MM-DD 형식임을 기억하십시오. 열의 데이터 유형이 DATETIME인 경우에만 DATE별로 데이터를 그룹화하려고 합니다.

students와 student_attendance라는 두 개의 테이블을 생성합니다. students 테이블에는 모든 학생에 대한 기본 세부 정보가 있고 student_attendance 테이블에는 STUDENT_ID 및 ATTENDANCE가 속성(열)으로 포함되어 있습니다.

학습 목적으로 아래 쿼리를 사용하여 두 테이블을 모두 만들 수도 있습니다.

예제 코드(테이블 만들기):

# Create a `students` table
CREATE TABLE students(
   ID INT NOT NULL PRIMARY KEY,
    FIRSTNAME VARCHAR(45) NOT NULL,
    LASTNAME VARCHAR(45) NOT NULL,
    GENDER VARCHAR(10) NOT NULL
);

# Create a `student_attendance` table
CREATE TABLE student_attendance(
    STUDENT_ID INT NOT NULL,
    ATTENDANCE DATETIME NOT NULL,
    FOREIGN KEY (STUDENT_ID) REFERENCES students(ID)
);

예제 코드(테이블에 데이터 삽입):

# Insert data into the `students` table
INSERT INTO students (ID, FIRSTNAME, LASTNAME, GENDER)
VALUES
(1, 'Mehvish', 'Ashiq', 'Female'),
(2, 'Thomas', 'Christopher', 'Male'),
(3, 'John', 'Jackson', 'Male');

# Insert data into the `stduent_attendance` table
INSERT INTO student_attendance (STUDENT_ID, ATTENDANCE)
VALUES
(1, '2022-05-02 08:15:10'),
(2, '2022-05-02 08:15:10'),
(3, '2022-05-02 08:15:10'),
(1, '2022-05-03 08:15:10'),
(2, '2022-05-03 08:15:10'),
(3, '2022-05-03 08:15:10'),
(1, '2022-05-04 08:15:10'),
(2, '2022-05-04 08:15:10'),
(3, '2022-05-04 08:15:10'),
(1, '2022-05-05 08:15:10'),
(2, '2022-05-05 08:15:10'),
(3, '2022-05-05 08:15:10'),
(1, '2022-05-06 08:15:10'),
(2, '2022-05-06 08:15:10'),
(3, '2022-05-06 08:15:10');

예제 코드(디스플레이 데이터):

SELECT * from students;
SELECT * from student_attendance;

출력(students 테이블용):

+----+-----------+-------------+--------+
| ID | FIRSTNAME | LASTNAME    | GENDER |
+----+-----------+-------------+--------+
|  1 | Mehvish   | Ashiq       | Female |
|  2 | Thomas    | Christopher | Male   |
|  3 | John      | Jackson     | Male   |
+----+-----------+-------------+--------+
3 rows in set (0.00 sec)

출력(student_attendance 테이블용):

+------------+---------------------+
| STUDENT_ID | ATTENDANCE          |
+------------+---------------------+
|          1 | 2022-05-02 08:15:10 |
|          2 | 2022-05-02 08:15:10 |
|          3 | 2022-05-02 08:15:10 |
|          1 | 2022-05-03 08:15:10 |
|          2 | 2022-05-03 08:15:10 |
|          3 | 2022-05-03 08:15:10 |
|          1 | 2022-05-04 08:15:10 |
|          2 | 2022-05-04 08:15:10 |
|          3 | 2022-05-04 08:15:10 |
|          1 | 2022-05-05 08:15:10 |
|          2 | 2022-05-05 08:15:10 |
|          3 | 2022-05-05 08:15:10 |
|          1 | 2022-05-06 08:15:10 |
|          2 | 2022-05-06 08:15:10 |
|          3 | 2022-05-06 08:15:10 |
+------------+---------------------+
15 rows in set (0.04 sec)

DATETIME 열을 DATE로 그룹화 MySQL에서만

월요일부터 금요일까지 수업에 참석한 학생 수를 확인하고 싶습니다. 다음과 같이 DATE로만 그룹화합니다.

예제 코드:

SELECT COUNT(STUDENT_ID), DATE(ATTENDANCE)
FROM student_attendance
GROUP BY DATE(student_attendance.ATTENDANCE);

출력:

+-------------------+------------------+
| COUNT(STUDENT_ID) | DATE(ATTENDANCE) |
+-------------------+------------------+
|                 3 | 2022-05-02       |
|                 3 | 2022-05-03       |
|                 3 | 2022-05-04       |
|                 3 | 2022-05-05       |
|                 3 | 2022-05-06       |
+-------------------+------------------+
5 rows in set (0.00 sec)

또는 ALIAS를 사용하여 출력을 명확하게 만들 수 있습니다.

예제 코드:

SELECT COUNT(STUDENT_ID) AS NumbOfStudents, DATE(ATTENDANCE) AS DateOnly
FROM student_attendance
GROUP BY DATE(DateOnly);

출력:

+----------------+------------+
| NumbOfStudents | DateOnly   |
+----------------+------------+
|              3 | 2022-05-02 |
|              3 | 2022-05-03 |
|              3 | 2022-05-04 |
|              3 | 2022-05-05 |
|              3 | 2022-05-06 |
+----------------+------------+
5 rows in set (0.00 sec)

위 쿼리에서 목표를 달성하기 위해서만 DATETIME 유형을 DATE로 캐스트합니다. 아래에서 간략하게 설명하는 다양한 기능과 절을 사용했습니다.

MySQL COUNT() 함수

COUNT()는 표현식의 개수를 반환하는 데 사용하는 집계 함수입니다. 특정 조건을 충족하는 모든 테이블 레코드를 계산할 수 있습니다.

COUNT() 함수의 반환 유형은 BIGINT입니다. 테이블에 일치하는 레코드가 없으면 0을 반환합니다.

SELECT 문과 함께 COUNT() 함수를 사용할 수 있는 세 가지 방법이 있습니다.

  1. Count (*) - 이 양식에 의해 생성된 출력에는 모든 중복, NULL 및 NOT NULL 값이 포함됩니다.
  2. Count (expression) - 이 COUNT() 함수에서 반환된 레코드 수에 NULL 값이 없습니다.
  3. Count (distinct) - 표현식의 결과로 NULL 값이 없는 개별 레코드의 수를 반환합니다.

MySQL DATE() 함수

DATE() 메소드는 DATETIME 표현식에서 DATE만 추출합니다. 표현식이 유효한 DATETIME 또는 DATE 값이 아니면 NULL을 반환합니다.

MySQL GROUP BY 절

GROUP BY 절은 동일한 값을 가진 레코드를 요약 레코드로 그룹화할 수 있습니다. 예를 들어, 수업에 있는 학생 수를 찾으십시오.

집계 함수와 함께 이 문을 사용하여 출력을 단일 또는 다중 필드(열)로 그룹화합니다.