您当前的位置: 首页 >  sql

Dream丶Killer

暂无认证

  • 4浏览

    0关注

    188博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

SQL练习61:对于employees表中,给出奇数行的first_name

Dream丶Killer 发布时间:2021-02-11 17:29:06 ,浏览量:4

SQL练习61:对于employees表中,给出奇数行的first_name

题目链接:牛客网

题目描述 对于employees表中,输出first_name排名(按first_name升序排序)为奇数的first_name

CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
如,输入为:
INSERT INTO employees VALUES(10001,'1953-09-02','Georgi','Facello','M','1986-06-26');
INSERT INTO employees VALUES(10002,'1964-06-02','Bezalel','Simmel','F','1985-11-21');
INSERT INTO employees VALUES(10005,'1955-01-21','Kyoichi','Maliniak','M','1989-09-12');
INSERT INTO employees VALUES(10006,'1953-04-20','Anneke','Preusig','F','1989-06-02');

输出格式:

first_nameGeorgiAnneke

因为Georgifirst_name排名为3,Annekefirst_name排名为1,所以会输出这2个,且输出时不需排序。

解法 此题理解起来有些绕,题目的意思是:先根据first_name进行升序排序,获得first_name为奇数的数据,再对照表按照表原来的顺序来输出这些奇数位的first_name。子查询使用窗口函数获得first_namerow_id(排序后的id)作为r表,将r表与employees表内连接,获取row_id % 2 = 1(奇数)的数据。

SELECT e.first_name
FROM employees e JOIN (SELECT first_name, rank() over(ORDER BY first_name) AS row_id 
                       FROM employees) r
                       ON e.first_name = r.first_name
WHERE row_id % 2 = 1
关注
打赏
1655344294
查看更多评论
立即登录/注册

微信扫码登录

0.1120s