comments | difficulty | edit_url | tags | |
---|---|---|---|---|
true |
中等 |
|
表:Fraud
+-------------+---------+ | Column Name | Type | +-------------+---------+ | policy_id | int | | state | varchar | | fraud_score | int | +-------------+---------+ policy_id 是这张表中具有不同值的列。 这张表包含 policy id,state 和 fraud score。
Leetcode 保险公司开发了一个 ML 驱动的 预测模型 来检测欺诈索赔的 可能性。因此,他们分配了经验最丰富的理赔员来处理前 5%
被标记 的索赔。
编写一个解决方案来找出 每个州 索赔的前 5
百分位数。
返回结果表,以 state
升序 排序,fraud_score
降序 排序,policy_id
升序 排序。
结果格式如下所示。
示例 1:
输入: Fraud 表: +-----------+------------+-------------+ | policy_id | state | fraud_score | +-----------+------------+-------------+ | 1 | California | 0.92 | | 2 | California | 0.68 | | 3 | California | 0.17 | | 4 | New York | 0.94 | | 5 | New York | 0.81 | | 6 | New York | 0.77 | | 7 | Texas | 0.98 | | 8 | Texas | 0.97 | | 9 | Texas | 0.96 | | 10 | Florida | 0.97 | | 11 | Florida | 0.98 | | 12 | Florida | 0.78 | | 13 | Florida | 0.88 | | 14 | Florida | 0.66 | +-----------+------------+-------------+ 输出: +-----------+------------+-------------+ | policy_id | state | fraud_score | +-----------+------------+-------------+ | 1 | California | 0.92 | | 11 | Florida | 0.98 | | 4 | New York | 0.94 | | 7 | Texas | 0.98 | +-----------+------------+-------------+ 解释: - 对于 California 州,只有 ID 为 1 的保单的欺诈分数为 0.92,属于该州的前 5%。 - 对于 Florida 州,只有 ID 为 11 的保单的欺诈分数为 0.98,属于该州的前 5%。 - 对于 New York 州,只有 ID 为 4 的保单的欺诈分数为 0.94,属于该州的前 5%。 - 对于 Texas 州,只有 ID 为 7 的保单的欺诈分数为 0.98,属于该州的前 5%。 输出表以state
升序排序,fraud_score
降序排序,policy_id
升序排序。
我们可以使用 RANK()
窗口函数来计算每个州的欺诈分数的排名,然后筛选出排名为 1 的记录,并且按照题目要求排序。
# Write your MySQL query statement below
WITH
T AS (
SELECT
*,
RANK() OVER (
PARTITION BY state
ORDER BY fraud_score DESC
) AS rk
FROM Fraud
)
SELECT policy_id, state, fraud_score
FROM T
WHERE rk = 1
ORDER BY 2, 3 DESC, 1;