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

Mehvish Ashiq 2024년2월16일
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별로 데이터를 그룹화하려고 합니다.

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

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

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

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

MySQL DATE() 함수

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

MySQL GROUP BY

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

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

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

관련 문장 - MySQL Groupby