首页 > 试题广场 >

有一张emloyees表: 请根据name排名(按升序排序)

[单选题]
有一张emloyees表:

请根据name排名(按升序排序),找到排名为奇数对应的name值,结果如下(输出结果不用排序):

下面MySQL语句正确的是:


  • SELECT e.name FROM emloyees e JOIN (SELECT emp_no,name, DENSE_RANK() OVER(ORDER BY name) r FROM employees) t ON e.emp_no = t.emp_no WHERE MOD(t.r, 2) = 1;

  • SELECT e.name FROM employees e JOIN (SELECT name, DENSE_RANK() OVER(ORDER BY name) AS num FROM employees) AS t ON e.name = t.name WHERE t.num & 1 = 1;

  • SELECT name FROM employees WHERE EXISTS (SELECT name FROM employees WHERE ROW_NUMBER() OVER(ORDER BY name)%2 = 1);

  • SELECT e1.name FROM (SELECT name,DENSE_RANK() OVER(ORDER BY name)AS rank FROM employees) e1 WHERE e1.rank % 2 = 1;

为了出题而出题,哪个场景会用姓名降序排序
发表于 2022-01-27 09:54:03 回复(1)
SELECT e.name 
FROM employees e 
JOIN 
(SELECT name, DENSE_RANK() OVER(ORDER BY name) AS num FROM employees) AS t 
ON e.name = t.name 
WHERE t.num & 1 = 1;
B 选项看懂了,最后的
t.num & 1 = 1
是位运算,与。转化为二进制之后,两个位都为1时,结果才为1,例如:3&5 即 0000 0011& 0000 0101 = 0000 0001,因此 3&5 的值得1。
发表于 2022-02-09 16:44:11 回复(0)
& 位与运算,对于一个数(a)来说: a与1的结果如果为1,则这个数是奇数,如果为0,则这个数是偶数
发表于 2022-03-02 10:13:55 回复(0)
D错就错在用了 rank 做别名 其他的根本没错 本来就要用子查询做 解释根本不对
还有 考虑到可能存在重名的情况 用dense_rank 输出不用distinct 去重可能会有问题
编辑于 2022-04-21 11:25:09 回复(2)
我感觉a选项的问题在employees,a选项是emloyees
发表于 2022-04-19 11:29:20 回复(1)
为什么A是错的 ???
发表于 2021-12-26 16:04:28 回复(11)
我做题太少实在不明白这个题的意思,这个排名为奇数的name是啥意思啊,题目也不是按奇数排序的啊,题目最后得到的是排名1和4啊😥
发表于 2022-03-02 15:28:59 回复(1)
这解释一派胡言
发表于 2023-01-26 15:30:25 回复(0)
测试了一下,D也是对的
发表于 2022-03-05 20:45:11 回复(2)
根据name排名,真是很不理解,啥玩意啊
发表于 2022-02-09 15:16:52 回复(1)
答案有问题吧?在oracle中运行A是对的
编辑于 2022-03-07 13:58:11 回复(3)
笑死,看了半天也没看出来D哪里有问题
发表于 2024-03-22 14:50:34 回复(0)
位于运算,这个拐好几个弯
编辑于 2023-12-13 15:03:29 回复(0)
D选项哪里错了啊,这解释我看不懂,查出来结果是对的不就成了吗,为什么非要原始表数据,离谱
你还不如解释成D是rank之后算有排序的子表所以查出来的结果已经排序好不符合题目要求来得实在呢,这解释给人绕晕了
发表于 2023-09-06 18:29:55 回复(0)
5&1=101&001,除了最后一位都舍去,奇数最后1,偶数最后0
发表于 2023-04-07 14:10:49 回复(0)
D为什么不对?解析说的不对吧
发表于 2022-11-29 10:06:23 回复(1)
CREATE TABLE employees (
    emp_no NUMBER(6, 0),
    birth_date DATE,
    name VARCHAR(10),
    gender CHAR(1),
    hire_date DATE
);

INSERT INTO employees VALUES(
    10001,
    DATE '1953-09-02',
    'Georgi',
    'M',
    DATE '1986-06-26'
);

INSERT INTO employees VALUES(
    10002,
    DATE '1964-06-04',
    'Bezalel',
    'F',
    DATE '1985-11-21'
);

INSERT INTO employees VALUES(
    10003,
    DATE '1955-01-21',
    'Kycichi',
    'M',
    DATE '1989-09-12'
);

INSERT INTO employees VALUES(
    10004,
    DATE '1953-04-20',
    'Anneke',
    'F',
    DATE '1989-06-02'
);

忽略 employees 拼写错误, A 也是对的,虽然这个 join 有点多余
发表于 2022-10-28 20:34:06 回复(0)
要求选择出的名字顺序只能按照表中的来
发表于 2022-08-15 10:33:32 回复(0)
发表于 2022-08-06 16:20:11 回复(0)
这道题D咋错了搞不懂

发表于 2022-06-15 15:00:15 回复(0)