Gruppieren Sie die Datetime-Spalte nur nach Datum in MySQL
Dieses Tutorial verwendet die Klausel GROUP BY
, die Funktionen COUNT()
und DATE()
, um die Spalte vom Typ DATETIME
nur in MySQL nach DATE
zu gruppieren.
Verwenden Sie GROUP BY
, COUNT()
und DATE()
, um die Spalte DATETIME
nur in MySQL nach DATE
zu gruppieren
Bevor Sie fortfahren, denken Sie daran, dass die DATETIME
-Werte wie YYYY-MM-DD hh:mm:ss
aussehen, während die DATE
-Werte das Format YYYY-MM-DD
haben. Wir wollen die Daten nur nach DATE
gruppieren, während der Datentyp der Spalte DATETIME
ist.
Wir erstellen zwei Tabellen mit den Namen students
und student_attendance
. Die Tabelle students
enthält grundlegende Details zu jedem Studenten, während die Tabelle student_attendance
STUDENT_ID
und ATTENDANCE
als Attribute (Spalten) enthält.
Wir können zu Lernzwecken auch beide Tabellen erstellen, indem wir die Abfragen unten verwenden.
Beispielcode (Tabellen erstellen):
# 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)
);
Beispielcode (Daten in die Tabellen einfügen):
# 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');
Beispielcode (Anzeigedaten):
SELECT * from students;
SELECT * from student_attendance;
Ausgabe (für Tabelle students
):
+----+-----------+-------------+--------+
| ID | FIRSTNAME | LASTNAME | GENDER |
+----+-----------+-------------+--------+
| 1 | Mehvish | Ashiq | Female |
| 2 | Thomas | Christopher | Male |
| 3 | John | Jackson | Male |
+----+-----------+-------------+--------+
3 rows in set (0.00 sec)
Ausgabe (für Tabelle 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)
Gruppieren Sie die Spalte DATETIME
nach DATE
Nur in MySQL
Wir wollen überprüfen, wie viele Schüler den Unterricht von Montag bis Freitag besucht haben. Wir werden nur wie folgt nach dem DATUM
gruppieren.
Beispielcode:
SELECT COUNT(STUDENT_ID), DATE(ATTENDANCE)
FROM student_attendance
GROUP BY DATE(student_attendance.ATTENDANCE);
Ausgang:
+-------------------+------------------+
| 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)
Alternativ können wir den ALIAS
verwenden, um die Ausgabe klarer zu machen.
Beispielcode:
SELECT COUNT(STUDENT_ID) AS NumbOfStudents, DATE(ATTENDANCE) AS DateOnly
FROM student_attendance
GROUP BY DATE(DateOnly);
Ausgang:
+----------------+------------+
| 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)
Wir wandeln den Typ DATETIME
nur in DATE
um, um das Ziel in der obigen Abfrage zu erreichen. Wir haben verschiedene Funktionen und Klauseln verwendet, die im Folgenden kurz erklärt werden.
MySQL-Funktion COUNT()
COUNT()
ist eine Aggregatfunktion, die wir verwenden, um die Anzahl des Ausdrucks zurückzugeben. Damit können wir alle Tabellendatensätze zählen, die eine bestimmte Bedingung erfüllen.
Der Rückgabetyp der Funktion COUNT()
ist BIGINT
. Es gibt 0
zurück, wenn es keine übereinstimmenden Datensätze in der Tabelle gibt.
Es gibt 3 Möglichkeiten, wie wir die Funktion COUNT()
mit der Anweisung SELECT
verwenden können.
Count (*)
– Die von diesem Formular erzeugte Ausgabe enthält alle doppelten,NULL
- undNOT NULL
-Werte.Count (Ausdruck)
- Die Anzahl der Datensätze, die von dieser FunktionCOUNT()
zurückgegeben wird, hat keineNULL
-Werte.Count (distinct)
– Gibt die Anzahl der unterschiedlichen Datensätze zurück, die keineNULL
-Werte als Ergebnis eines Ausdrucks haben.
MySQL-Funktion DATE()
Die Methode DATE()
extrahiert nur das DATE
aus dem Ausdruck DATETIME
. Wenn der Ausdruck kein gültiger DATETIME
- oder DATE
-Wert ist, gibt er NULL
zurück.
MySQL GROUP BY
-Klausel
Die Klausel GROUP BY
kann die Datensätze mit denselben Werten in den Übersichtsdatensätzen gruppieren. Ermitteln Sie beispielsweise die Anzahl der in der Klasse anwesenden Schüler.
Wir verwenden diese Anweisung mit den Aggregatfunktionen, um die Ausgabe nach einzelnen oder mehreren Feldern (Spalten) zu gruppieren.