SQL刷题

简单题

182. 查找重复的电子邮箱

SQL:方法一

select email from person group by email having count(email) > 1;

通过 group by 对 email 分组,在使用 having 将重复的 email 筛选出来。

SQL:方法二

select t.email from (
    select email, count(email) num from person group by email
) t where t.num > 1;

将 email 分组后计算出相同 email 的数量作为临时表,筛选出 num > 1 的邮箱

SQL:方法三

with temp as (
    select email, count(email) num from person group by email
) 
select email from temp where num > 1;

使用 with 建立临时表,和方法二一样

SQL:方法四

select distinct person.email from person
left join person temp on person.email = temp.email
where person.id != temp.id;

使用 left join 自连,连接条件是 person.eamil = temp.email 并且通过 where 把 person.id != temp.id筛选出来,最后再通过 distinct 去重

196. 删除重复的电子邮箱

SQL:方法一

delete person from person 
join person p2 
on person.email = p2.email and person.id > p2.id;

自连接,连接条件是 person.email = p2.email 筛选出 person.id > p2.id ,这个是要删除的。

SQL:方法二

delete person from person, person p2
where person.email = p2.email and person.id > p2.id;

和方法一一样。

SQL:方法三

delete person from person,
(
    select min(id) as id, email from person group by email having count(email) > 1) as p2
where person.email = p2.email and person.id != p2.id;

将 person 安装 email 进行分组,并用 having 筛选出重复的最小 id
将这个临时表在和 person 进行一起联查,条件是 person.email = p2.email 并且不能和临时表的 id 相同,结果就是要删除的数据。

1667、修复表中的名字

CONCAT() 函数
CONCAT 可以将多个字符串拼接在一起。

 LEFT(str, length) 函数
从左开始截取字符串,length 是截取的长度。

UPPER(str) 与 LOWER(str)
UPPER(str) 将字符串中所有字符转为大写

LOWER(str) 将字符串中所有字符转为小写

SUBSTRING(str, begin, end)
截取字符串,end 不写默认为空。

SUBSTRING(name, 2) 从第二个截取到末尾,注意并不是下标,就是第二个。

select user_id,
CONCAT(
UPPER(left(name, 1)), 
LOWER(RIGHT(name, length(name) - 1)))
as name
from Users
order by user_id

1484. 按日期分组销售产品 

1.分组

2.排序

3.组内拼接
排序,分隔符

SELECT sell_date,
    COUNT(DISTINCT product) AS 'num_sold',
    GROUP_CONCAT(DISTINCT product 
        ORDER BY product ASC    #按照字典序排列,升序
        SEPARATOR ',')          #用','分隔
        AS 'products'    #组内拼接
FROM Activities
GROUP BY sell_date
ORDER BY sell_date;

group_concat用法:
group_concat([去重:distinct] '字符串' [排序:group by 该字符串 asc/desc] 分隔符:separator ',')

理解:group_concat()函数,顾名思义与group by 有关,功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
所以最后是对sell_date分组才能达到效果,group by sell_date

当然,我可以为您介绍一下 SQL Server 的相关内容。SQL Server 是一种关系型数据库管理系统,用于存储和管理大量结构化数据。在过程中,您可以通过解决一系列与 SQL Server 相关的问来提高对其的理解和应用能力。 以下是一些常见的 SQL Server 方向和相关问: 1. SQL 基础知识: - 什么是 SQL Server?它有哪些特点和优势? - SQL Server 中的数据类型有哪些?它们分别用于存储什么类型的数据? - 如何创建数据库和表格? - 如何插入、更新和删除数据? - 如何使用 SELECT 语句查询数据? 2. 数据查询与筛 - 如何使用 WHERE 子句进行条件选? - 如何使用 ORDER BY 子句对查询结果进行排序? - 如何使用 GROUP BY 子句进行分组聚合操作? - 如何使用 HAVING 子句进行条件筛选(针对分组后的结果)? . 数据操作与修改: - 如何使用 UPDATE 语句修改表格中的数据? - 如何使用 DELETE 语句删除表格中的数据? - 如何使用 INSERT INTO 语句插入新的数据? 4. 数据连接与联结: - 如何使用 JOIN 连接多个表格? - 什么是内连接、外连接和交叉连接? - 如何使用子查询进行复杂的数据查询? 5. 数据聚合与统计: - 如何使用聚合函数(如 SUM、AVG、COUNT、MAX、MIN)进行数据统计? - 如何使用 GROUP BY 子句进行分组统计? - 如何使用 HAVING 子句进行条件筛选(针对分组后的统计结果)? 这些问只是 SQL Server 中的一部分,您可以根据自己的需求和水平选择适合的目进行练习。同时,还可以参考 SQL Server 官方文档、教程和在线资源来深入学习和提高技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值