Skip to content

Latest commit

 

History

History
157 lines (121 loc) · 2.83 KB

File metadata and controls

157 lines (121 loc) · 2.83 KB
comments difficulty edit_url tags
true
简单
数据库

English Version

题目描述

MyNumbers 表:

+-------------+------+
| Column Name | Type |
+-------------+------+
| num         | int  |
+-------------+------+
该表可能包含重复项(换句话说,在SQL中,该表没有主键)。
这张表的每一行都含有一个整数。

 

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

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

查询结果如下例所示。

 

示例 1:

输入:
MyNumbers 表:
+-----+
| num |
+-----+
| 8   |
| 8   |
| 3   |
| 3   |
| 1   |
| 4   |
| 5   |
| 6   |
+-----+
输出:
+-----+
| num |
+-----+
| 6   |
+-----+
解释:单一数字有 1、4、5 和 6 。
6 是最大的单一数字,返回 6 。

示例 2:

输入:
MyNumbers table:
+-----+
| num |
+-----+
| 8   |
| 8   |
| 7   |
| 7   |
| 3   |
| 3   |
| 3   |
+-----+
输出:
+------+
| num  |
+------+
| null |
+------+
解释:输入的表中不存在单一数字,所以返回 null 。

 

解法

方法一:分组 + 子查询

我们可以先将 MyNumbers 表按照 num 进行分组统计,找出只出现一次的数字,然后使用子查询找出最大的数字即可。

MySQL

# Write your MySQL query statement below
SELECT MAX(num) AS num
FROM
    (
        SELECT num
        FROM MyNumbers
        GROUP BY 1
        HAVING COUNT(1) = 1
    ) AS t;

方法二:分组 + CASE 表达式

与方法一类似,我们可以先将 MyNumbers 表按照 num 进行分组统计,然后使用 CASE 表达式,找出只出现一次的数字,然后按数字降序排序,取第一个即可。

MySQL

# Write your MySQL query statement below
SELECT
    CASE
        WHEN COUNT(1) = 1 THEN num
        ELSE NULL
    END AS num
FROM MyNumbers
GROUP BY num
ORDER BY 1 DESC
LIMIT 1;