mysql查询分组后 组内数据

在MySQL数据库中,我们经常使用分组查询来对数据进行聚合操作。在分组查询中,我们通常会使用GROUP BY子句对数据进行分组,并且可以配合使用聚合函数来对每个组内的数据进行计算。
在本文中,我将详细介绍如何在MySQL数据库中使用分组查询来查询组内数据,并且会通过示例代码演示实际操作过程。
示例数据库
为了方便演示,我们假设有一个名为students的表,表结构如下:
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
score INT
);
INSERT INTO students VALUES (1, 'Alice', 20, 80);
INSERT INTO students VALUES (2, 'Bob', 22, 75);
INSERT INTO students VALUES (3, 'Charlie', 21, 90);
INSERT INTO students VALUES (4, 'David', 23, 85);
INSERT INTO students VALUES (5, 'Eve', 22, 88);
查询每个年龄段的平均分数
假设我们希望查询每个年龄段学生的平均分数,我们可以使用如下SQL查询语句:
SELECT age, AVG(score) AS avg_score
FROM students
GROUP BY age;
以上查询语句中,我们首先选择age和AVG(score)作为要查询的字段,然后使用GROUP BY age对age进行分组。最终结果将返回每个年龄段学生的平均分数。
查询每个年龄段前三名学生
如果我们希望查询每个年龄段的前三名学生,我们可以使用如下SQL查询语句:
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY age ORDER BY score DESC) AS rank
FROM students
) t
WHERE t.rank <= 3;
在以上查询语句中,我们使用了窗口函数ROW_NUMBER()来对每个年龄段的学生进行排名,并且通过PARTITION BY age和ORDER BY score DESC来分组和排序。最终结果将返回每个年龄段的前三名学生。
查询最高分数学生的详细信息
假设我们希望查询最高分数学生的详细信息,我们可以使用如下SQL查询语句:
SELECT *
FROM students
WHERE score = (SELECT MAX(score) FROM students);
以上查询语句中,我们首先通过SELECT MAX(score) FROM students子查询获得最高分数,然后再根据该最高分数来查询对应学生的详细信息。最终结果将返回最高分数学生的详细信息。
通过以上示例代码,我们可以看到在MySQL数据库中,使用分组查询可以方便我们对数据进行聚合操作,并且可以灵活地处理各种数据分析需求。
极客笔记