MySQL小练习

分数排名

在这里插入图片描述


select a.Score as Score,
    (select count(distinct b.Score) from Scores b where b.Score>=a.Score) as Rank
    -- 创建临时表,(a b两表相同)查找b表中大于等于a表中的数据条数(用distinct去重),即为等级
    from Scores a
    order by Score DESC;
    
查找重复的邮箱

在这里插入图片描述

注:
顺序:where > group by > having > order by

--方法一 group by + 临时表
select Email 
    from (select Email,count(Email) as num from Person group by Email) as a
    --嵌套select要有别名
    where num>1

--方法二:group by + having
select Email
	from Person
	group by Email
	having count(Email) > 1;
    
各部门工资最高的员工

在这里插入图片描述


-- 先用group by + max()查询出各部门最高的工资和部门id
select d.Name as 'Department',e.Name as 'Employee',Salary
    from Employee e join Department d on e.DepartmentId=d.Id
    where (DepartmentId,Salary) in (select DepartmentId,max(Salary) from Employee group by DepartmentId)
    
删除重复的电子邮箱

在这里插入图片描述


-- 方法一:not in
DELETE FROM Person
	WHERE Id NOT IN (  
	select Id from   -- 要使用临时表,MySQL不允许select和delete操作同一个表
       (SELECT MIN(Id) AS Id FROM Person GROUP BY Email) as a
)
-- 方法二:
DELETE p1 FROM Person p1,Person p2
	WHERE p1.Email = p2.Email AND p1.Id > p2.Id

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值