サーチ…
ORDER BYをTOPと組み合わせて使用すると、列の値に基づいて上位x行が返されます
この例では、我々は唯一の行の並べ替えを決定していない、GROUP BYを使用することができます返されたが、また、我々は結果セットを制限するために、TOPを使用していることから、返され何行。
無名の有名なQ&Aサイトから上位5名の評判ユーザーを返すとしましょう。
ORDER BYなし
この問合せは、デフォルトで順序付けられた上位5行(この場合は結果に表示されている列ではないにもかかわらず、この場合は「Id」)を表の最初の列として戻します。
SELECT TOP 5 DisplayName, Reputation
FROM Users
戻る...
表示名 | 評判 |
---|---|
コミュニティ | 1 |
ジェフ・ダルガス | 12567 |
ジャロッド・ディクソン | 11739 |
ジェフアトウッド | 37628 |
ジョエル・スピルスキー | 25784 |
ORDER BYで
SELECT TOP 5 DisplayName, Reputation
FROM Users
ORDER BY Reputation desc
戻る...
表示名 | 評判 |
---|---|
JonSkeet | 865023 |
ダーリン・ディミトロフ | 661741 |
BalusC | 650237 |
ハンス・パサント | 625870 |
マーク・グラヴェル | 601636 |
備考
一部のバージョンのSQL(MySQLなど)では、先頭にTOP
代わりにSELECT
の最後にLIMIT
句を使用します。たとえば、次のようになります。
SELECT DisplayName, Reputation
FROM Users
ORDER BY Reputation DESC
LIMIT 5
複数の列による並べ替え
SELECT DisplayName, JoinDate, Reputation FROM Users ORDER BY JoinDate, Reputation
表示名 | JoinDate | 評判 |
---|---|---|
コミュニティ | 2008-09-15 | 1 |
ジェフアトウッド | 2008-09-16 | 25784 |
ジョエル・スピルスキー | 2008-09-16 | 37628 |
ジャロッド・ディクソン | 2008年10月03日 | 11739 |
ジェフ・ダルガス | 2008年10月03日 | 12567 |
列番号(名前の代わりに)でソート
名前の列を記述するのではなく、列の番号(一番左の列が '1')を使用して、並べ替えの基となる列を示すことができます。
Pro:後で列名を変更する可能性が高いと思われる場合は、このコードを破ることはありません。
Con:これは一般的にクエリの可読性を低下させます(「ORDER BY 14」は何らかのカウントを必要としますが、スクリーン上にはおそらく指で表示されます)。
このクエリは、列名Reputation
代わりにselect文から相対カラム位置3
情報で結果をソートします。
SELECT DisplayName, JoinDate, Reputation FROM Users ORDER BY 3
表示名 | JoinDate | 評判 |
---|---|---|
コミュニティ | 2008-09-15 | 1 |
ジャロッド・ディクソン | 2008年10月03日 | 11739 |
ジェフ・ダルガス | 2008年10月03日 | 12567 |
ジョエル・スピルスキー | 2008-09-16 | 25784 |
ジェフアトウッド | 2008-09-16 | 37628 |
エイリアス順
論理的なクエリ処理順序のために、エイリアスは、で順番に使用することができます。
SELECT DisplayName, JoinDate as jd, Reputation as rep
FROM Users
ORDER BY jd, rep
そして、select文の列の相対的な順序を使用することができます。上記の例を考えてください。別名を使用する代わりに、表示名のように相対的な順序を使用してください。Jdは1、Jdは2などです。
SELECT DisplayName, JoinDate as jd, Reputation as rep
FROM Users
ORDER BY 2, 3
カスタム注文の並べ替え順序
部門別にこのテーブルのEmployee
をソートするには、部門ORDER BY Department
を使用します。ただし、ソート順がアルファベット順でない場合は、 Department
値を正しくソートする別の値にマップする必要があります。これはCASE式で行うことができます:
名 | 部門 |
---|---|
持っています | それ |
ユスフ | HR |
ヒラリー | HR |
ジョー | それ |
メリー | HR |
ケン | 会計士 |
SELECT *
FROM Employee
ORDER BY CASE Department
WHEN 'HR' THEN 1
WHEN 'Accountant' THEN 2
ELSE 3
END;
名 | 部門 |
---|---|
ユスフ | HR |
ヒラリー | HR |
メリー | HR |
ケン | 会計士 |
持っています | それ |
ジョー | それ |