首页 > 数据库技术 > 详细

MySQL基础练习(三)

时间:2019-04-06 22:58:03      阅读:210      评论:0      收藏:0      [点我收藏+]

经过之前两次的学习,这次用MySQL进行略微复杂的操作练习

各部门工资最高的员工

首先创建表employee和表department。如下

技术分享图片

 技术分享图片

我们需要查询每个部门工资最高的员工

select a.Name as Department,b.Name as Employee,b.Salary from department a join (select DepartmentId,Name,Salary from employee where Salary in( select max(salary) as salary from employee group by DepartmentId)) b on a.Id = b.DepartmentId;

 

 技术分享图片

换座位

同样的先创建表seat

技术分享图片

 

SELECT(CASE WHEN id %2 = 1 AND id!=max_id THEN id+1 WHEN id %2 = 0 THEN id-1  WHEN id = max_id THEN id  END) AS id,student from (select id,student,(select MAX(id) from seat) as max_id from seat) a order by id;

分数排名

先创建表scores

技术分享图片

我们要查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。

SELECT Score,
CASE 
WHEN @prevRank = Score THEN @curRank 
WHEN @prevRank := Score THEN @curRank := @curRank + 1
END AS Rank
FROM scores,
(SELECT @curRank :=0, @prevRank := NULL) 
ORDER BY Score desc;

行程和用户

 写一段 SQL 语句查出 2013年10月1日 至 2013年10月3日 期间非禁止用户的取消率。基于上表,你的 SQL 语句应返回如下结果,取消率(Cancellation Rate)保留两位小数。

各部门前3高工资的员工

 对于上次的employee表我们需要新插入两行数据

技术分享图片

 找出每个部门工资前三高的员工

SELECT 
    d.name AS Department, e.Name AS Employee, Salary
FROM
    Employee e
        JOIN
    Department d ON e.DepartmentId = d.Id
WHERE
    (SELECT 
            COUNT(DISTINCT em.Salary)
        FROM
            Employee em
        WHERE
            em.Salary >= e.Salary
                AND em.DepartmentId = e.DepartmentId) <= 3
GROUP BY Department , Salary DESC;

分数排名

上次的表scores

技术分享图片

 

SELECT 
    s.Score,
    (SELECT 
            COUNT(*) + 1
        FROM
            Scores AS s1
        WHERE
            s1.Score > s.Score) AS Rank
FROM
    scores s
ORDER BY Score DESC;

 

MySQL基础练习(三)

原文:https://www.cnblogs.com/mambakb/p/10662981.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!