MySQL中的表如何筛选数据得到新表

在MySQL数据库中,我们经常需要根据特定条件从一个表中筛选数据并生成一个新的表。这种操作非常常见,例如,我们可能需要将一个大型的数据表按照某个字段进行分组,并计算出每个分组的统计数据,然后将结果保存到一个新的表中。本文将介绍如何在MySQL中使用SELECT语句和CREATE TABLE语句来实现这一功能,并通过一个示例来演示具体的操作步骤。

实际问题

假设我们有一个学生信息表(students),其中包含了学生的姓名、年龄和成绩等字段。现在我们需要根据成绩将学生分为优秀、良好、及格和不及格四个等级,并统计每个等级的人数。然后,我们希望根据这个结果生成一个新的表(student_grade),其中包含等级和人数两个字段。

示例

首先,让我们创建一个名为students的表,并插入一些测试数据。

CREATE TABLE students (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    age INT,
    score INT
);

INSERT INTO students (name, age, score) VALUES
    ('Alice', 18, 80),
    ('Bob', 19, 90),
    ('Catherine', 20, 85),
    ('David', 19, 75),
    ('Emily', 18, 95),
    ('Frank', 20, 60);

现在,我们可以使用SELECT语句来筛选数据,并生成一个新的表。首先,我们需要使用CASE语句将成绩转换为等级。

SELECT
    name,
    age,
    score,
    CASE
        WHEN score >= 90 THEN '优秀'
        WHEN score >= 80 THEN '良好'
        WHEN score >= 60 THEN '及格'
        ELSE '不及格'
    END AS grade
FROM students;

上述SELECT语句将根据成绩字段生成一个名为grade的新列,其中包含了每个学生的等级。接下来,我们需要根据等级进行分组,并统计每个等级的人数。为了实现这一功能,我们可以使用GROUP BY子句和COUNT函数。

SELECT
    grade,
    COUNT(*) AS count
FROM (
    SELECT
        CASE
            WHEN score >= 90 THEN '优秀'
            WHEN score >= 80 THEN '良好'
            WHEN score >= 60 THEN '及格'
            ELSE '不及格'
        END AS grade
    FROM students
) AS subquery
GROUP BY grade;

上述SELECT语句先将成绩转换为等级,并将结果存储在一个名为subquery的子查询中。然后,我们使用GROUP BY子句将subquery中的结果按照等级进行分组,并使用COUNT函数统计每个分组的人数。

最后,我们可以使用CREATE TABLE语句将结果保存到一个新的表中。

CREATE TABLE student_grade (
    grade VARCHAR(10),
    count INT
);

INSERT INTO student_grade
SELECT
    grade,
    COUNT(*) AS count
FROM (
    SELECT
        CASE
            WHEN score >= 90 THEN '优秀'
            WHEN score >= 80 THEN '良好'
            WHEN score >= 60 THEN '及格'
            ELSE '不及格'
        END AS grade
    FROM students
) AS subquery
GROUP BY grade;

上述CREATE TABLE语句创建了一个名为student_grade的新表,并定义了两个字段:grade和count。然后,我们使用INSERT INTO语句将统计结果插入到student_grade表中。

至此,我们已经成功地根据成绩将学生分为不同等级,并统计了每个等级的人数,并将结果保存到了一个新的表中。

总结

通过使用SELECT语句和CREATE TABLE语句,我们可以轻松地筛选数据,并生成一个新的表。在本文的示例中,我们演示了如何将学生信息表按照成绩进行分级,并统计每个等级的人数,并将结果保存到一个新的表中。这个操作在实际的数据库应用中非常常见,例如,用于生成报表、统计分析等。希望本文能对你在MySQL中筛选数据得到新表