目录
题目
分析
代码
题目
表: Accounts
+-------------+------+ | 列名 | 类型 | +-------------+------+ | account_id | int | | income | int | +-------------+------+ 在 SQL 中,account_id 是这个表的主键。 每一行都包含一个银行帐户的月收入的信息。
查询每个工资类别的银行账户数量。 工资类别如下:
"Low Salary"
:所有工资 严格低于20000
美元。"Average Salary"
: 包含 范围内的所有工资[$20000, $50000]
。-
"High Salary"
:所有工资 严格大于50000
美元。
结果表 必须 包含所有三个类别。 如果某个类别中没有帐户,则报告 0
。
按 任意顺序 返回结果表。
查询结果格式如下示例。
示例 1:
输入: Accounts 表: +------------+--------+ | account_id | income | +------------+--------+ | 3 | 108939 | | 2 | 12747 | | 8 | 87709 | | 6 | 91796 | +------------+--------+ 输出: +----------------+----------------+ | category | accounts_count | +----------------+----------------+ | Low Salary | 1 | | Average Salary | 0 | | High Salary | 3 | +----------------+----------------+ 解释: 低薪: 有一个账户 2. 中等薪水: 没有. 高薪: 有三个账户,他们是 3, 6和 8.
分析
查询每个工资类别的银行账户数量。结果表必须包含所有三个类别。
需要根据工资数据分类为三个账户类别,考虑合并union
"Low Salary":所有工资 严格低于 20000 美元,如果某个类别中没有帐户,则报告 0
这类工资水平归类为"Low Salary"类别,select 'Low Salary' category
严格低于,income<20000,通过sum,if结合计数,不必case when,sum(if(income<20000,1,0))
考虑若类别中没有账户,即没有数据中没有账户满足Low Salary的条件,会报null,通过ifnull使其报告0
再命名为account_count,ifnull(sum(if(income<20000,1,0)),0) accounts_count
"Average Salary": 包含 范围内的所有工资 [$20000, $50000],如果某个类别中没有帐户,则报告 0
这里包含范围,不可使用,20000<=income<=50000,可考虑and分别表示两端或between限制范围,其他同理,
select 'Average Salary' category, ifnull(sum(if(20000<=income and income<=50000,1,0)),0) accounts_count
"High Salary":所有工资 严格大于 50000 美元,如果某个类别中没有帐户,则报告 0
与Low Salary同理,select 'High Salary' category, ifnull(sum(if(income>50000,1,0)),0) accounts_count
代码
select 'Low Salary' category, ifnull(sum(if(income<20000,1,0)),0) accounts_count
from Accounts
union
select 'Average Salary' category, ifnull(sum(if(20000<=income and income<=50000,1,0)),0) accounts_count
from Accounts
union
select 'High Salary' category, ifnull(sum(if(income>50000,1,0)),0) accounts_count
from Accounts