MySQL で Datetime 列を日付のみでグループ化する
このチュートリアルでは、GROUP BY
句、COUNT()
および DATE()
関数を使用して、MySQL でのみ DATE
によって DATETIME
型の列をグループ化します。
GROUP BY
、COUNT()
、および DATE()
を使用して DATETIME
列を DATE
でグループ化する MySQL のみ
先に進む前に、DATETIME
の値は YYYY-MM-DD hh:mm:ss
のように見えるのに対し、DATE
の値は YYYY-MM-DD
の形式であることを覚えておいてください。 列のデータ型が DATETIME
の場合に限り、DATE
でデータをグループ化します。
students
と student_attendance
という名前の 2つのテーブルを作成します。 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()
関数を使用する方法は 3つあります。
カウント (*)
- このフォームによって生成される出力には、すべての重複、NULL
、およびNOT NULL
値が含まれます。Count (expression)
- このCOUNT()
関数によって返されるレコードの数にはNULL
値がありません。Count (distinct)
-NULL
値を持たない個別レコードの数を式の結果として返します。
MySQL DATE()
関数
DATE()
メソッドは、DATETIME
式から DATE
のみを抽出します。 式が有効な DATETIME
または DATE
値でない場合、NULL
が返されます。
MySQL GROUP BY
句
GROUP BY
句は、同じ値を持つレコードを要約レコードにグループ化できます。 たとえば、クラスに出席している生徒の数を見つけます。
このステートメントを集計関数と共に使用して、出力を単一または複数のフィールド (列) でグループ化します。