75点以上の成績を収めた学生の生徒の名前を照会します。各名前の最後の3文字で出力を並べ替えます。 2人以上の生徒の名前が最後の3文字が同じである場合(例:「Bobby」、「Robby」など)、IDの昇順で2番目に並べ替えます。
STUDENTSテーブルには次の列があります。
ID , NAME , MARKS
入力例:
id name marks
1 ashley 81
2 samantha 75
3 Julia 76
4 belvet 84
出力例:
Ashley
Julia
Belvet
説明:
アシュリー、ジュリア、ベルベットだけがMarks > 75
。それぞれの名前の最後の3文字を見ると、重複はなく、'ley' < 'lia' < 'vet'
。
これは正しい出力です:
マークが75以上の学生から名前を選択
substr(name、-3,3)、idによる順序。
MySQLでこれを試してください:
SELECT NAME FROM STUDENTS WHERE Marks > 75 ORDER BY RIGHT(NAME, 3), ID ASC;
2人以上の生徒の両方の最後の3文字が同じ名前(Bobby、Robbyなど)である場合は、IDの昇順に並べ替えます。それが理由です ORDER BY ID
が必要です
Mysqlの場合
SELECT Name FROM STUDENTS WHERE Marks>75 ORDER By SUBSTRING(Name,-3,LENGTH(Name)),ID
ref:-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;
あなたはこのコマンドを試すことができます:
SELECT * FROM students 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 SUBSTRING(NAME,-3), ID;
注:これはMySQLで動作します
一番いいのはこんな感じ
出力のクエリ
select name from students where marks>75 ORDER BY substr(name,-3) asc , id asc;
親切に以下のものを試してください、
SELECT Name FROM STUDENTS WHERE Marks >75 ORDER BY substr(name,-3,3),Id;
ms SQlサーバーで正常に動作するクエリ.itを試してください
SELECT
name
FROM
students
WHERE
marks > 75
ORDER BY
RIGHT(name, 3) ASC
, id ASC
MS SQLサーバー
SELECT Name from STUDENTS
WHERE MARKS>75
ORDER BY RIGHT(NAME ,3),RIGHT(NAME ,2),RIGHT(NAME ,1), ID
私と一緒にうまくいきました!ここでは3つしかありませんが、もっと大きな数に変更できるので、誰か他のショートカットを教えてください。
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
SELECT NAME FROM STUDENTS WHERE MARKS > 75 ORDER BY RIGHT(NAME, 3), ID ASC;
mYSQLの場合。
MySQLの場合:
SELECT
name
FROM
STUDENTS
WHERE
marks > 75
ORDER BY
RIGHT(name, 3),
RIGHT(name, 2),
id;
これはmysqlのSUBSTR
関数を使用して可能性があります
_SELECT `name`
FROM `students`
WHERE `marks` > 75
ORDER BY SUBSTR(`name`, -3), ID ASC;
_
SUBSTR(name, -3)
これは、生徒のテーブルの名前列の最後の3文字を選択します
mssqlの場合は試してください
SELECT NAME FROM STUDENTS WHERE Marks>75 ORDER BY SUBSTRING(NAME,LEN(NAME)-2,3), ID ASC;
このクエリは私にも役立ちます
select Name from STUDENTS where Marks > 75 ORDER BY SUBSTRING(NAME, LENGTH(NAME)-2, 3), ID;
以下のクエリはMS SQL SERVERで機能します
SELECT name FROM Students
WHERE marks > 75
ORDER BY SUBSTRING(name,len(name)-2,LEN(name)), id;
Oracleの場合
SELECT NAME
FROM STUDENT
WHERE MARKS>75
ORDER BY SUBSTR(NAME,-3),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;
を試してください。
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)
、このメソッドはcolumn(name)から最後の3文字を取得し、_ORDER BY
_列を使用して、最後の3文字が同じである場合、最後の3文字に基づいて辞書式順序でソートされます[〜#〜] id [〜#〜]に従って順序付けられます。