按列的最后三个字符排序的查询

新手上路,请多包涵

查询 STUDENTS 中任何得分高于 75 分的学生的姓名。按每个名称的最后三个字符对输出进行排序。如果两个或多个学生的名字都以相同的最后三个字符结尾(即:“Bobby”、“Robby”等),则按 ID 升序对他们进行二次排序。

STUDENTS 表具有以下列:

ID , NAME , MARKS

样本输入:

 id         name     marks
1          ashley   81
2          samantha 75
3          julia    76
4          belvet   84

样本输出:

 Ashley
Julia
Belvet

解释:

只有 Ashley、Julia 和 Belvet 有 marks > 75 。如果你查看他们每个名字的最后三个字符,没有重复和 'ley' < 'lia' < 'vet'

这是正确的输出:

从分数>75的学生中选择姓名

按 substr(name, -3, 3), id 排序;

原文由 Sonam Kapoor 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 518
1 个回答

我于 2022 年 4 月 25 日在 RackerRank 上进行了此测试,代码为:

 select distinct name from students where marks > 75 order by right(name,3), id asc;

我收到以下错误:

 ERROR 3065 (HY000) at line 4: Expression #2 of ORDER BY clause is not in SELECT list, references column 'students.ID' which is not in SELECT list; this is incompatible with DISTINCT

当我在选择( select id, name... )上添加 id 时,我得到一个“ wrong answer ”。预期的答案不包括 id 字段。

我得到它的唯一方法是:

 select main.name from
    (select distinct id, name from students where marks > 75 order by right(name,3), id asc) as main;

原文由 Sidon 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题