首页 > 其他分享 >Leetcode 1907 按分类统计薪水

Leetcode 1907 按分类统计薪水

时间:2024-10-01 14:18:21浏览次数:13  
标签:Salary category 薪水 UNION Accounts income 1907 Leetcode SELECT

一、题目

查询每个工资类别的银行账户数量。 工资类别如下:

  • "Low Salary":所有工资 严格低于 20000 美元。
  • "Average Salary": 包含 范围内的所有工资 [$20000, $50000] 。
  • "High Salary":所有工资 严格大于 50000 美元。

结果表 必须 包含所有三个类别。 如果某个类别中没有帐户,则报告 0 。

按 任意顺序 返回结果表。

二、数据准备

Create table If Not Exists Accounts (account_id int, income int);
Truncate table Accounts;
insert into Accounts (account_id, income) values ('3', '108939');
insert into Accounts (account_id, income) values ('2', '12747');
insert into Accounts (account_id, income) values ('8', '87709');
insert into Accounts (account_id, income) values ('6', '91796');

三、思路

这道题难点在于存在某个类别中没有账户,如何把这一条记录反映在结果中

有两个思路:

  • 基于数据表分类:从 Accounts 表入手,分别计算每个类别的账户数量,然后合并结果。
  • 创建一个分类表:先定义一个类别目录表,然后通过 LEFT JOIN 来确保所有类别都在结果中。

四、方法一

-- 定义分类为 "Low Salary"
SELECT 
    'Low Salary' AS category,
    COUNT(CASE WHEN income < 20000 THEN 1 END) AS accounts_count
FROM Accounts
UNION ALL
-- 定义分类为 "Average Salary"
SELECT 
    'Average Salary',
    COUNT(CASE WHEN income BETWEEN 20000 AND 50000 THEN 1 END)
FROM Accounts
UNION ALL
-- 定义分类为 "High Salary"
SELECT 
    'High Salary',
    COUNT(CASE WHEN income > 50000 THEN 1 END)
FROM Accounts;

 五、方法二

 

-- 创建一个临时表,包含所有工资类别
WITH categories AS (
    SELECT 'Low Salary' AS category
    UNION ALL 
    SELECT 'Average Salary' 
    UNION ALL 
    SELECT 'High Salary'
),
 -- 创建一个临时表,通过 CASE 语句分类账户
cet AS (
    SELECT 
        CASE 
            WHEN income < 20000 THEN 'Low Salary'
            WHEN income BETWEEN 20000 AND 50000 THEN 'Average Salary'
            ELSE 'High Salary' 
        END AS category
    FROM Accounts
)
SELECT 
    c.category,
    COALESCE(COUNT(ct.category), 0) AS accounts_count
FROM categories c
LEFT JOIN cet ct ON c.category = ct.category
GROUP BY c.category

 

六、注意点

  • UNION ALL 与 UNION 的区别
    • UNION
      • 去重UNION 会自动去重,只返回唯一的结果行。这意味着如果多个查询返回相同的行,结果集中只会显示一次。
    • UNION ALL
      • 保留重复UNION ALL 会保留所有的结果,包括重复的行。即使多个查询返回相同的行,结果集中也会显示每一行。
  • 函数COALESCE()
    • COALESCE() 函数用于返回第一个非空值。它可以接受多个参数,并从左到右检查这些参数,直到找到一个非空值。如果所有值都是空的,则返回 NULL。
    • 在这个例子中,COALESCE() 会检查 column1,如果它是 NULL,则检查 column2,如果 column2 也是 NULL,最后返回 'default_value'。
    • SELECT COALESCE(column1, column2, 'default_value') AS result
      FROM your_table;
       

标签:Salary,category,薪水,UNION,Accounts,income,1907,Leetcode,SELECT
From: https://blog.csdn.net/Yaoo415/article/details/142553435

相关文章

  • leetcode刷题day34|动态规划Part03 背包问题(01背包问题 二维、01背包问题 一维、416.
    0-1背包问题二维动规五部曲1、确定dp数组以及下标的含义dp[i][j]表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。(取物品时可以是取0-i的任意一个,或者是他们的组合)2、确定递推公式不放物品i:背包容量为j,里面不放物品i的最大价值是dp[i-1][j]......
  • leetcode刷题day33|动态规划Part02(62.不同路径、63. 不同路径 II、 343.整数拆分、96.
    62.不同路径机器人从(0,0)位置出发,到(m-1,n-1)终点。动规五部曲1、确定dp数组(dptable)以及下标的含义dp[i][j]:表示从(0,0)出发,到(i,j)有dp[i][j]条不同的路径。2、确定递推公式想要求dp[i][j],只能有两个方向来推导出来,即dp[i-1][j]和dp[i][j-1]。dp[i]......
  • Leetcode 611. 有效三角形的个数
    1.题目基本信息1.1.题目描述给定一个包含非负整数的数组nums,返回其中可以组成三角形三条边的三元组个数。1.2.题目地址https://leetcode.cn/problems/valid-triangle-number/description/2.解题方法2.1.解题思路升序排列后,去两条边a和b,取b后面的第三条边c;a+c>b和b+c>a一......
  • 力扣(leetcode)每日一题 1845 座位预约管理系统| treeSet和priority Queue的区别|线段树
    之前发过一篇,感觉还有深挖的地方,于是又补充一些信息这题目虽然是middle难度题目,要解答出来是只要easy的时间,但是深挖可以有hard的难度题解1可以帮助复习线段树的使用,题解2可以复习一下java基础知识题解1线段树这是自己憋出来的线段树classSeatManager{......
  • 【LeetCode Hot 100】23. 合并K个升序链表
    题目描述看到这个题目会想起之前做过的合并2个升序链表。在那个题目中,由于两个链表都已经是升序的,可以将两个链表的元素进行逐个比较并添加到答案链表中。但是在本题中,每次循环都需要在k个链表的当前元素中找出最小的,而且需要在所有k个链表都遍历完之后跳出循环,所以效率比较低。......
  • Leetcode 875. 爱吃香蕉的珂珂
    1.题目基本信息1.1.题目描述珂珂喜欢吃香蕉。这里有n堆香蕉,第i堆中有piles[i]根香蕉。警卫已经离开了,将在h小时后回来。珂珂可以决定她吃香蕉的速度k(单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉k根。如果这堆香蕉少于k根,她将吃掉这堆的所有香蕉,然后......
  • Leetcode:栈和队列的互相实现
    目录一、用两个队列实现栈题目:分析:代码实现: 二、用两个栈实现队列题目: 分析:代码:总结:核心就在于先进先出和后进先出之间的一个灵活变换,两个栈能够先进先出,而两个队列能够后进先出 一、用两个队列实现栈题目:.-力扣(LeetCode).-备战技术面试?力扣提供海量技术......
  • leetcode1353. 最多可以参加的会议数目
    给你一个数组 events,其中 events[i]=[startDayi,endDayi] ,表示会议 i 开始于 startDayi ,结束于 endDayi 。你可以在满足 startDayi <=d<=endDayi 中的任意一天 d 参加会议 i 。在任意一天 d 中只能参加一场会议。请你返回你可以参加的 最大 会议......
  • leetcode133. 克隆图
    给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。图中的每个节点都包含它的值 val(int)和其邻居的列表(list[Node])。classNode{publicintval;publicList<Node>neighbors;}测试用例格式:简单起见,每个节点的值都和它的索引相同。例如,第一个......
  • Leetcode 981. 基于时间的键值存储
    1.题目基本信息1.1.题目描述设计一个基于时间的键值数据结构,该结构可以在不同时间戳存储对应同一个键的多个值,并针对特定时间戳检索键对应的值。实现TimeMap类:TimeMap()初始化数据结构对象voidset(Stringkey,Stringvalue,inttimestamp)存储给定时间戳timestamp......