题1.
查询每个工资类别的银行账户数量。 工资类别如下:
"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 | +----------------+----------------+
记录1.这题从示例中可以看出,主要难点是得把Accounts表中未出现的Average Salary输出出来,所以建立三个表分别单独记录并使用union all将表连接起来:
SELECT
'Low Salary' AS category,
COUNT(*) AS accounts_count
FROM
Accounts
WHERE
income < 20000
UNION ALL
SELECT
'Average Salary' AS category,
COUNT(*) AS accounts_count
FROM
Accounts
WHERE
income BETWEEN 20000 AND 50000
UNION ALL
SELECT
'High Salary' AS category,
COUNT(*) AS accounts_count
FROM
Accounts
WHERE
income > 50000
题2.
编写解决方案来交换每两个连续的学生的座位号。如果学生的数量是奇数,则最后一个学生的id不交换。
按 id
升序 返回结果表。
查询结果格式如下所示。
示例 1:
输入: Seat 表: +----+---------+ | id | student | +----+---------+ | 1 | Abbot | | 2 | Doris | | 3 | Emerson | | 4 | Green | | 5 | Jeames | +----+---------+ 输出: +----+---------+ | id | student | +----+---------+ | 1 | Doris | | 2 | Abbot | | 3 | Green | | 4 | Emerson | | 5 | Jeames | +----+---------+
记录:
select
case
when mod(id,2)=0 then id-1
when mod(id,2)=1 and id=(select max(id) from Seat) then id
else id+1
end as id,
student
from
Seat
order by id
主要记录一下,当想使用聚合函数计算的结果时,需要单独写一句查询,直接使用聚合函数结果而不进行group by时会出错。