力扣上的SQL复健记录8

题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.

编写一个解决方案,以查找具有有效电子邮件的用户。

一个有效的电子邮件具有前缀名称和域,其中:

  1. 前缀 名称是一个字符串,可以包含字母(大写或小写),数字,下划线 '_' ,点 '.' 和/或破折号 '-' 。前缀名称 必须 以字母开头。
  2. 为 '@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 结尾。注意,点 . 在正则表达式中是一个特殊字符,所以使用 \\. 来表示字面的点。
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值