programing

열의 마지막 세 문자를 기준으로 정렬할 쿼리

showcode 2023. 3. 31. 23:01
반응형

열의 마지막 세 문자를 기준으로 정렬할 쿼리

75점 이상의 점수를 받은 학생의 이름을 조회합니다.각 이름의 마지막 3자로 출력 순서를 지정합니다.둘 이상의 학생이 모두 마지막 3자로 끝나는 이름(예: "Bobby", "Robby" 등)을 가지고 있는 경우, 2차적으로 ID 오름차순으로 정렬합니다.

Students 테이블에는 다음 열이 있습니다.

ID , NAME , MARKS

입력 예:

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

샘플 출력:

Ashley
Julia
Belvet

설명:

애슐리, 줄리아, 벨벳만이 가지고 있다.marks > 75 세 , 중복은 없습니다'ley' < 'lia' < 'vet'.

올바른 출력은 다음과 같습니다.

학생 중에서 이름을 선택합니다.여기서 marks>

기판(이름, -3, 3)별 순서, id;

MySQL의 경우 다음을 사용해 보십시오.

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

), 、 3 [ , etc ]는, 오름차순ID 에 .BOBBY 、 Robby ) bobby 、 bobby를 、 bobby를를를 를 bobby 。★★★★★★★★★★★★★★★★★★.ORDER BY ID요합니니다다

MySQL의 경우:

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

레퍼런스: MySQL SUBSTRING() 함수

Oracle의 경우:

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

다음 명령을 사용할 수 있습니다.

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

아래 쿼리를 사용해 볼 수 있습니다.

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

메모: 이것은 MySQL에서 동작합니다.

용도:

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

DISTINCT제거해야 합니다. 않으면 여러 학생입니다.NAME시당합합니니다

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

아래의 것을 시험해 보세요.

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

다음 쿼리는 SQL Server에 대해 작동합니다.

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

액티브 리딩 [https://en.wikipedia.org/wiki/Microsoft_SQL_Server]

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

MySQL 용입니다.

가장 좋은 것은 다음과 같습니다.

출력 쿼리

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

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 

Oracle의 경우

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

SQL Server:

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

나한텐 잘 먹혔어!

아래 쿼리를 사용해 주십시오.SQL Server에서는 정상적으로 동작합니다.

SELECT
     name
FROM
     students
WHERE
     marks > 75
ORDER BY
     RIGHT(name, 3) ASC
   , id ASC

SQL Server의 경우 다음을 수행합니다.

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

될 요.SUBSTR MySQL의 기능:

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

SUBSTR(name, -3)는 학생 테이블의 이름 열에 있는 마지막 세 문자를 선택합니다.

HackerRank에 이 두 가지 솔루션을 제출했더니 수락되었습니다.

MySQL

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

오라클

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

설명:SUBSTRING() 또는 SUBSTRING() 함수의 구문은 다음과 같습니다.

SUBSTRING ( string , start _ position , length )여기서 length는 문자열에서 추출되는 서브스트링의 길이입니다.

따라서, 위의 쿼리는 사전 편찬적으로 그들의 이름의 마지막 3자를 기준으로 75점 이상을 받은 학생들의 이름을 나열합니다.두 명 이상의 학생이 이름에 동일한 마지막 3자를 가지고 있는 경우(예:Bobby, Robby)는 아이디를 기준으로 오름차순으로 이름을 출력합니다.

이 쿼리는 나에게도 유효합니다.

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

MySQL의 경우:

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

HackerRank SQL 질문입니다.

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

용도:

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

SUBSTRING(name, -3, 3)컬럼(이름)의 마지막 세 글자를 사용하여ORDER BY열은 마지막 세 문자를 기준으로 사전순으로 정렬됩니다.마지막 세 글자가 같을 경우 ID에 따라 순서가 매겨집니다.

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;

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

mySql에서 동작합니다.

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

DB2의 경우:

select name from students where marks > 75 order by substr(name,length(name)-2,3),ID ASC;

여기 있는 다른 사람들처럼 STUBT() 대신 RIGHT() 함수를 사용했는데 MySQL을 사용하여 작동했습니다.다음은 완전한 SQL 코드입니다.

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

ORACLE SQL에서는 여기에 나와 있는 mysql 답변을 기반으로 합니다.

SELECT NAME FROM STUDENTS WHERE MARKS > 75 ORDER BY SUBSTR (NAME, LENGTH(NAME)-2, 3) ASC;

이 테스트는 RackerRank에서 2022년 4월 25일에 실시했습니다.코드는 다음과 같습니다.

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

선택 항목에 ID를 추가했을 때(select id, name...) 「 」를 취득합니다.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; 

이것을 시험해 보세요.

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

언급URL : https://stackoverflow.com/questions/34832734/query-to-order-by-the-last-three-characters-of-a-column

반응형