题1.
查询并返回 Employee
表中第二高的薪水 。如果不存在第二高的薪水,查询应该返回 null
记录.
这里的主要难点是返回null,因此此处不应再使用建立子表的方式,而应建立一个子查询:
select(
select distinct
salary
from
Employee
order by salary desc
limit 1 offset 1
) as SecondHighestSalary
limit 1 offset 1:这个部分的意思是跳过第一条记录(最高的薪水),并只获取下一条记录(第二高的薪水)。
题2.
编写解决方案找出每个日期、销售的不同产品的数量及其名称。
每个日期的销售产品名称应按词典序排列。
返回按 sell_date
排序的结果表。
结果表结果格式如下例所示。
记录.
select
sell_date,
count(distinct product) as num_sold,
group_concat(distinct product order by product separator ",") as products
from
Activities
group by sell_date
order by sell_date
复习一下group_concat()函数,用于将来自多个记录的列值连接成一个字符串,使用示例如上,其中separator参数用于设置分隔符。
题3.
编写一个解决方案,以查找具有有效电子邮件的用户。
一个有效的电子邮件具有前缀名称和域,其中:
- 前缀 名称是一个字符串,可以包含字母(大写或小写),数字,下划线
'_'
,点'.'
和/或破折号'-'
。前缀名称 必须 以字母开头。 - 域为
'@leetcode.com'
。
记录.
SELECT user_id, name, mail
FROM Users
WHERE mail REGEXP '^[A-Za-z][A-Za-z0-9_.-]*@leetcode\\.com$'
- REGEXP 是 MySQL 中用于模式匹配的正则表达式函数。
- ^[A-Za-z] 确保电子邮件地址以字母开头。
- [A-Za-z0-9_.-]* 允许电子邮件地址中的前缀包含字母、数字、下划线 _、点 . 和破折号 -。
- @leetcode\\.com$ 确保电子邮件地址以 @leetcode.com 结尾。注意,点 . 在正则表达式中是一个特殊字符,所以使用 \\. 来表示字面的点。