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

时间:2016-01-16 22:13:36

标签: mysql sql database oracle

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

学生表有以下栏目:

public void setLock(boolean locked, int finalJ, Button button) { if (!locked) { button.setBackgroundDrawable(getResources().getDrawable(R.drawable.dice_locked)); } else { button.setBackgroundDrawable(getResources().getDrawable(R.drawable.dice)); } isLocked[finalJ] = !isLocked[finalJ]; }

示例输入:

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

这是正确的输出:

  

从标记为> 75

的学生中选择姓名      

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

排序

25 个答案:

答案 0 :(得分:9)

尝试使用MySQL:

SELECT NAME FROM STUDENTS WHERE Marks > 75 ORDER BY RIGHT(NAME, 3), ID ASC;

答案 1 :(得分:5)

如果两个或更多学生的姓名都以相同的最后三个字符结尾(即:Bobby,Robby等),则按升序ID对其进行二次排序。这就是为什么需要ORDER BY ID

对于Mysql

SELECT Name FROM STUDENTS WHERE Marks>75 ORDER By SUBSTRING(Name,-3,LENGTH(Name)),ID

参考: - http://www.w3resource.com/mysql/string-functions/mysql-substring-function.php

对于Oracle

SELECT Name FROM Students WHERE Marks>75 ORDER BY substr(Name,-3),ID;

答案 2 :(得分:3)

应删除

DISTINCT,否则将忽略具有相同NAME的多名学生。

SELECT NAME
FROM STUDENTS
WHERE MARKS > 75
ORDER BY SUBSTRING(NAME, LEN(NAME)-2, 3), ID;

答案 3 :(得分:2)

您可以尝试以下命令:

SELECT * FROM students ORDER BY RIGHT(name, 3), ID

让我知道。 ; - 。)

答案 4 :(得分:2)

您可以尝试以下查询:

SELECT NAME FROM STUDENTS WHERE MARKS > 75 ORDER BY SUBSTRING(NAME,-3), ID;

注意:这个适用于MySQL

答案 5 :(得分:1)

使用MySQL中的SUBSTR函数可能是这样:

SELECT `name`
FROM `students`
WHERE `marks` > 75
ORDER BY SUBSTR(`name`, -3), ID ASC;

SUBSTR(name, -3)将在学生表的名称列中选择最后三个字符。

答案 6 :(得分:1)

请尝试以下查询。在SQl服务器

中工作正常
SELECT 
     name 
FROM
     students 
WHERE
     marks > 75 
ORDER BY
     RIGHT(name, 3) ASC
   , id ASC

答案 7 :(得分:1)

使用:

state() can only be called on class components

答案 8 :(得分:1)

请尝试以下一种,

SELECT Name FROM STUDENTS WHERE Marks >75 ORDER BY substr(name,-3,3),Id;

答案 9 :(得分:1)

最好的一个是这样的

查询输出

select name from students where marks>75 ORDER BY substr(name,-3) asc , id asc;

答案 10 :(得分:0)

Oracle 11g设置

CREATE TABLE students ( id, name, marks ) AS
  SELECT 1, 'Alice',     76 FROM DUAL UNION ALL
  SELECT 2, 'Beatrice',  76 FROM DUAL UNION ALL
  SELECT 3, 'Carol',     78 FROM DUAL UNION ALL
  SELECT 4, 'Denis',     80 FROM DUAL UNION ALL
  SELECT 5, 'Edward',    43 FROM DUAL UNION ALL
  SELECT 6, 'Fiona',    100 FROM DUAL UNION ALL
  SELECT 7, 'Gareth',     75 FROM DUAL;

<强>查询

SELECT Name
FROM   students
WHERE  Marks > 75
ORDER BY SUBSTR( name, -3, 3 ), ID;

<强>结果:

NAME   
--------
Alice    
Beatrice 
Denis    
Fiona    
Carol 

答案 11 :(得分:0)

SELECT Name FROM STUDENTS 
WHERE
MARKS > 75 
ORDER BY LOWER(SUBSTR(NAME, - 3, 3)) ASC , ID ASC;

答案 12 :(得分:0)

我在HackerRank上提交了这两种解决方案,它们都被接受了:

MySQL

SELECT name FROM students WHERE marks > 75 ORDER BY SUBSTRING(name, -3, 3), id

Oracle

SELECT name FROM students WHERE marks > 75 ORDER BY SUBSTR(name, -3, 3), ID;

说明: 函数SUBSTRING()或SUBSTR()具有以下语法:

SUBSTRING( string start_position length )其中 length 是要从中提取的子字符串的长度字符串

因此,以上查询按字典名称的最后3个字符,按字典顺序列出了得分超过75分的学生的姓名。如果两个或两个以上学生的名字中的最后3个字符相同(例如,鲍比,罗比),则他们的名字将按照ID的升序打印。

答案 13 :(得分:0)

对于mysql,您可以尝试 select Name from STUDENTS where Marks > 75 order by RIGHT(name, 3), ID;

对于oracle,请尝试以下操作 select Name from STUDENTS where Marks > 75 order by substr(name, -3), ID;

答案 14 :(得分:0)

对于MySQL:

SELECT 
  name 
FROM 
  STUDENTS 
WHERE 
  marks > 75 
ORDER BY 
  RIGHT(name, 3), 
  RIGHT(name, 2), 
  id;

答案 15 :(得分:0)

SELECT NAME FROM STUDENTS WHERE marks > 75 ORDER BY SUBSTRING(name, -3, 3), id;

SUBSTRING(name, -3, 3),此方法将从列(名称)中取最后三个字符,如果最后三个字符相同,则在ORDER BY列的帮助下将根据最后三个字符按字典顺序排序然后它会根据 ID 订购。

答案 16 :(得分:0)

for mssql试试吧

SELECT NAME FROM STUDENTS WHERE Marks>75 ORDER BY SUBSTRING(NAME,LEN(NAME)-2,3), ID ASC;

答案 17 :(得分:0)

如果是Oracle

SELECT NAME
FROM STUDENT
WHERE MARKS>75
ORDER BY SUBSTR(NAME,-3),ID;

答案 18 :(得分:0)

SELECT NAME FROM STUDENTS WHERE MARKS > 75 ORDER BY RIGHT(NAME, 3), ID ASC;

用于MYSQL。

答案 19 :(得分:0)

此查询也适用于我

select Name from STUDENTS where Marks > 75 ORDER BY SUBSTRING(NAME, LENGTH(NAME)-2, 3), ID;

答案 20 :(得分:0)

以下查询适用于MS SQL SERVER

SELECT name FROM Students 
WHERE marks > 75 
ORDER BY SUBSTRING(name,len(name)-2,LEN(name)), id;

答案 21 :(得分:0)

MS SQL SERVER

SELECT Name from STUDENTS
WHERE MARKS>75
ORDER BY RIGHT(NAME ,3),RIGHT(NAME ,2),RIGHT(NAME ,1), ID

和我一起工作得很好!有人请告诉其他一些快捷方式,因为这里只有3个,但可能会更改为更高的数字。

答案 22 :(得分:0)

HackerRank SQL问题。

select distinct Name from STUDENTS where Marks > 75
order by substr(Name,-3,length(Name)),ID

答案 23 :(得分:-1)

试试这个:

SELECT NAME FROM STUDENTS WHERE MARKS > 75 ORDER BY SUBSTRING (NAME, LEN(NAME)-2 ,LEN(NAME)), ID

答案 24 :(得分:-1)

从学生中选择姓名 > 75 按 right(name,3), id 排序;