【SQL】仅出现一次的最大数据

目录

语法

需求

示例

分析

代码


语法

SELECT MAX(salary) AS highest_salary

FROM employees;

MAX 语句是一种常用于数据库查询、编程语言以及数据分析中的函数,用于返回一组值中的最大值,可以结合 GROUP BY 子句使用 MAX 函数,以获取每个组的最大值。

SELECT name, salary

FROM employee

WHERE salary = (SELECT MAX(salary) FROM employee)

子查询(Sub Query)本质上是一个完整的SELECT语句,它可以嵌套在另一个SELECT语句、INSERT语句、UPDATE语句或DELETE语句中。子查询的输出可以包括一个单独的值(单行子查询)、几行值(多行子查询)或多列数据(多列子查询)。以上是单行子查询的示例。

  • 单行子查询:只返回一行数据的子查询语句。这种子查询通常用于比较操作,如等于、大于、小于等。
  • 多行子查询:返回多行数据的子查询。这种子查询通常与IN、ANY或ALL谓词一起使用,以进行集合比较。
  • 此外,子查询还可以根据其执行方式分为相关子查询和非相关子查询:
  • 相关子查询:子查询的执行依赖于外部查询。换句话说,子查询中的表用到了外部的表,并进行了条件关联。因此,每执行一次外部查询,子查询都要重新计算一次。
  • 非相关子查询:子查询不依赖于外部查询,可以在外部查询执行之前独立执行。这种子查询通常只执行一次。

需求

MyNumbers 表:

复制代码
+-------------+------+
| Column Name | Type |
+-------------+------+
| num         | int  |
+-------------+------+

该表可能包含重复项(换句话说,在SQL中,该表没有主键)。

这张表的每一行都含有一个整数。

单一数字 是在 MyNumbers 表中只出现一次的数字。

找出最大的 单一数字 。如果不存在 单一数字 ,则返回 null 。

查询结果如下例所示。

示例

复制代码
输入:
MyNumbers 表:
+-----+
| num |
+-----+
| 8   |
| 8   |
| 3   |
| 3   |
| 1   |
| 4   |
| 5   |
| 6   |
+-----+
输出:
+-----+
| num |
+-----+
| 6   |
+-----+
解释:单一数字有 1、4、5 和 6 。
6 是最大的单一数字,返回 6 。
复制代码
输入:
MyNumbers table:
+-----+
| num |
+-----+
| 8   |
| 8   |
| 7   |
| 7   |
| 3   |
| 3   |
| 3   |
+-----+
输出:
+------+
| num  |
+------+
| null |
+------+
解释:输入的表中不存在单一数字,所以返回 null 。

分析

单一数字 是在 MyNumbers 表中只出现一次的数字。

按照num分组,group by num

通过count确定单一数据,having count(num)=1

找出最大的单一数字

分两步,先单一数据,后最大

先通过自查询找出所有单一数据,(select num from MyNumbers group by num having count(num)=1)

通过max()函数查找最大的单一数据,select max(num)

设置别名,避免重名,as n

如果不存在 单一数字 ,则返回 null 。

一个很妙的点,当MAX()函数在没有行可供计算时,它将返回NULL。因此,如果MyNumbers表中的所有num值都不是唯一的,这个查询将返回NULL。

代码

复制代码
select max(num) num 
from 
    (select num 
    from MyNumbers 
    group by num 
    having count(num)=1) n

相关推荐
·云扬·9 分钟前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
野生技术架构师11 分钟前
SQL语句性能优化分析及解决方案
android·sql·性能优化
IT邦德12 分钟前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫37 分钟前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i1 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.1 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
jiunian_cn1 小时前
【Redis】渐进式遍历
数据库·redis·缓存
橙露1 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot
冰暮流星1 小时前
sql语言之分组语句group by
java·数据库·sql