mysql中的三张表,一张学生姓名和学生的id
一张是成绩表,id和成绩,一张是考试科目表格,语数英,一共三位同学,查询出各科最高分数的人和分数和对应的科目展示出来
使用的方法只有关联关系和找最大值和排序
你的表结构不太合理,应该成绩表包括id,学生id,科目id和成绩,考试科目表,包括id和科目名,包括三行记录语数英
SELECT s.姓名, s.ID, k.科目名, MAX(c.成绩) AS 最高分数
FROM 学生表 s
JOIN 成绩表 c ON s.ID = c.学生ID
JOIN 考试科目表 k ON c.科目ID = k.ID
GROUP BY c.科目ID
SELECT s.name, sc.score, su.subject
FROM students s
JOIN scores sc ON s.id = sc.id
JOIN subjects su ON sc.subject_id = su.id
JOIN (
SELECT subject_id, MAX(score) AS max_score
FROM scores
GROUP BY subject_id
) max_scores ON sc.subject_id = max_scores.subject_id AND sc.score = max_scores.max_score;
首先进行了三个表的关联(使用了INNER JOIN),然后使用子查询(subquery)找到每个科目的最高分数。最后,将这个子查询结果与成绩表进行关联,以获取每个科目最高分数的学生和对应的科目。
如果这张表的引擎是 MyISAM,那么 ID=4,如果是 InnoDB 那么 ID=2(MySQL 8 之前的版本)。
MySQL 中什么情况会导致自增主键不能连续?
以下情况会导致 MySQL 自增主键不能连续:
InnoDB 中自增主键能不能被持久化?
自增主键能不能被持久化(8.0前)
说的是 MySQL 重启之后 InnoDB 能不能恢复重启之前的自增列,InnoDB 在 8.0 之前是没有持久化能力的,但 MySQL 8.0 之后就把自增主键保存到 redo log(一种日志类型,下文会详细讲)中,当 MySQL 重启之后就会从 redo log 日志中恢复。