列表

详情


619. 只出现一次的最大数字

MyNumbers 表:

+-------------+------+
| Column Name | Type |
+-------------+------+
| num         | int  |
+-------------+------+
这张表没有主键。可能包含重复数字。
这张表的每一行都含有一个整数。

 

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

请你编写一个 SQL 查询来报告最大的 单一数字 。如果不存在 单一数字 ,查询需报告 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 。

 

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
# Write your MySQL query statement below

pythondata 解法, 执行用时: 388 ms, 内存消耗: 59.8 MB, 提交时间: 2023-09-17 10:46:52

import pandas as pd

'''
1. 去重复
2. 选取最大值
3. 注意去重后df为空
'''
def biggest_single_number(my_numbers: pd.DataFrame) -> pd.DataFrame:
    try:
        df = my_numbers.sort_values('num', ascending=False).drop_duplicates(subset=['num'], keep=False)
        return pd.DataFrame({'num':[df.iat[0, 0]]})
    except:
        return pd.DataFrame({'num':[None]})

# 统计数字出现次数再筛选
def biggest_single_number2(my_numbers: pd.DataFrame) -> pd.DataFrame:
    df = my_numbers.groupby("num").size().reset_index(name='cnt')
    # df = my_numbers["num"].value_counts().reset_index(name='cnt')
    df = df[df["cnt"]==1]
    return pd.DataFrame({"num":[df["num"].max()]})
    
def biggest_single_number3(my_numbers: pd.DataFrame) -> pd.DataFrame:
    ans = my_numbers.drop_duplicates(keep=False).sort_values('num',ascending=False).head(1)
    if ans.shape[0] == 0:
        ans.loc[0] = {'num':None}
    return ans

mysql 解法, 执行用时: 241 ms, 内存消耗: 0 B, 提交时间: 2023-04-02 11:52:50

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

上一题