阅读 MySQL知识1

以下几个问题都在 t_socre 表中进行,表结构如下。

CREATE TABLE `t_score` (
  `id` int NOT NULL AUTO_INCREMENT,
  `class` varchar(255) DEFAULT NULL,
  `score` decimal(11,2) DEFAULT NULL,
  `name` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4

① 查询第二高的分数

查第一高的很简单,一个 MAX 函数好了,那查询第二高的呢,稍微改变一下就可以了。

使用子查询 + MAXNOT IN 还可以替换为 <> 、!=

SELECT MAX(score) FROM t_score WHERE score NOT IN (select MAX(score) from t_score );

使用 < + MAX,和上一种方式其实差不多

SELECT MAX(score) FROM t_score  WHERE score < (SELECT MAX(score) FROM t_score);

使用 自查询 + Limit

SELECT score  FROM (SELECT score FROM t_score ORDER BY score DESC LIMIT 2) AS s ORDER BY score ASC LIMIT 1;

② 查找每个班的最高分

一个 GROUP BY 解决

SELECT class,MAX(score) FROM t_score GROUP BY class;

③ 查找重复记录

例如下面这条 SQL,只查询不重复的记录以及重复记录中id最大的一条,因为字查询用的是 MAX(id)

稍加改动,将MAX(id)改为 MIN(id),就可以查询重复记录中id最小的一条了。

SELECT * FROM t_score a 
WHERE
	id = 
	(
	SELECT MAX(id) FROM	t_score b 
	WHERE
		a.class = b.class 
		AND a.`name` = b.`name` 
	AND a.score = b.score 
	)

④ 删掉多余重复记录

大多数情况下,查询重复记录不是目的,最终的目的很有可能是将多余的重复记录删掉,只留一条就够了。

稍加改动是不是就可以了呢,例如下面的语句。最开始我就是这么写的,而且点击执行后,悠然的拿起手机,准备劳逸结合一下。

DELETE FROM t_score a 
WHERE
	id != (
	SELECT MAX(id) FROM	t_score b 
	WHERE
		a.class = b.class 
		AND a.`name` = b.`name` 
		AND a.score = b.score 
	);

报错:

1093 - You can't specify target table 'a' for update in FROM clause, Time: 0.028000s

不能在 SELECT 子句中引用正在被更新的表,显然我们要更新的表就被用在了子查询中。

那怎么办呢,稍微进一步思考,只要把要删除记录的 id 集合先查出来,然后再删除 id 在待删除集合中的就可以了,就是再套一层。

DELETE FROM t_score WHERE id IN (
    SELECT id FROM (
        SELECT id FROM t_score a 
        WHERE id != (
            SELECT MAX(id) 
            FROM t_score b 
            WHERE a.class = b.class 
                AND a.`name` = b.`name` 
                AND a.score = b.score
        )
    ) AS temp
);

相关推荐

  1. 阅读 MySQL知识1

    2024-03-24 19:56:03       18 阅读
  2. Mysql数据库基础知识1

    2024-03-24 19:56:03       29 阅读
  3. 阅读基础知识2

    2024-03-24 19:56:03       22 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-24 19:56:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-24 19:56:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-24 19:56:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-24 19:56:03       20 阅读

热门阅读

  1. Vue常用指令介绍

    2024-03-24 19:56:03       15 阅读
  2. 2024网络安全&数据安全加固类资料合集

    2024-03-24 19:56:03       17 阅读
  3. Pytorch:torch.utils.checkpoint()

    2024-03-24 19:56:03       19 阅读
  4. ModuleNotFoundError: No module named ‘sklearn.cross_validation

    2024-03-24 19:56:03       16 阅读
  5. rollup打包起手式

    2024-03-24 19:56:03       18 阅读
  6. 阿里云部署OneApi

    2024-03-24 19:56:03       20 阅读
  7. 【Prometheus】查询数据接口

    2024-03-24 19:56:03       20 阅读
  8. 创建各类三角形

    2024-03-24 19:56:03       17 阅读
  9. Python:继承

    2024-03-24 19:56:03       21 阅读