クエリーの結果を並べ替える - ORDER BY
クエリーの結果をソートしてみよう
これまで、テーブルから全レコードや、検索条件を指定してレコードを取得しました。
今回は、ソート順を指定して、クエリーの結果を並べ替えてみましょう。
サンプルデータを生成する
サンプルデータをまだ作っていない場合は、以下のクエリーを実行して、データを取得する元のテーブルを作っておいてください。
CREATE TABLE Students ( StudentID INT NOT NULL PRIMARY KEY, FirstName VARCHAR(50) NULL, LastName VARCHAR(50) NULL, Birthday DATE NULL, Gender CHAR(1) NULL ); INSERT INTO Students (StudentID, FirstName, LastName, Birthday, Gender) VALUES (1, 'Taro', 'Yamada', '1980-02-15', 'M'), (2, 'Hanako', 'Tanaka' ,'1979-12-30', 'F'), (3, 'Yuko', 'Suzuki', '1979-07-07', 'F'), (4, 'Takao', 'Sato', '1980-03-12', 'M'), (5, 'Hiroki', 'Takagi', '1979-04-05', 'M');
ORDER BY でソート順を指定する
クエリーの結果セットのソート順を指定するには SELECT 文の最後で ORDER BY 句を使います。
例えば、Students テーブルの全レコードを Birthday の昇順に並べたい時は、次のように指定します。
SELECT * FROM Students ORDER BY Birthday;
[ 実行結果 ]
反対に、Students テーブルの全レコードを Birthday の降順に並べたい時は、以下のようにカラム名の後に DESC と追加します。
SELECT * FROM Students ORDER BY Birthday DESC;
[ 実行結果 ]
昇順 が ASC で、降順が DESC ですが、何も指定しなければ 「 昇順 (ASC) 」 になります。
ORDER BY で複数のカラムでソート順を指定する
複数のカラムを使って並べ替えることも可能です。 カンマで区切って、カラムと順序を続けます。
例えば、まずは Gender(性別)で、次に Birthday の降順で並べ替えたい時は次のように指定します。
SELECT * FROM Students ORDER BY Gender, Birthday DESC;
[ 実行結果 ]
OORDER BY でカラムの別名でソート順を指定する
既存のテーブルのカラムだけでなく、SELECT 句で作ったカラムを使ってもソートすることができます。
その時は、SELECT 句でカラムエイリアス(別名)をつけて、それを ORDER BY 句で指定します。
例えば、YEAR は日付から年を取り出す関数で、YEAR(Birthday) のようにして Birthday の年を BirthdayYear というカラムとして取得しているとします。
そのようなクエリーの結果を、BirthdayYear と LastName で並べたい時は、次のように指定することができます。
SELECT *, YEAR(Birthday) AS BirthdayYear FROM Students ORDER BY BirthdayYear, LastName;
[ 実行結果 ]
TOP でソートの後に上位にくるレコードを取得する
SELECT 句で「TOP 取得したいレコード数」のように指定すると、上から指定したレコード数の結果セットを取得することができます。
ORDER BY を指定しないと、予期せぬレコードが取得される可能性があるので、通常 TOP と ORDER BY はセットで使われます。
例えば、先ほどの BirthdayYear と LastName で並べた結果の最初の 3 行だけを取得したい場合は次のように指定することができます。
SELECT TOP 3 *, YEAR(Birthday) AS BirthdayYear FROM Students ORDER BY BirthdayYear, LastName;[ 実行結果 ]
次は、T-SQL の集計関数を使ってみましょう。