SQLで特定のレコードだけをソートする方法を解説します。
サンプルデータの作成
まずはサンプル用のusersテーブルを作成します。
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
次にusersテーブルにサンプルデータを投入します。
INSERT INTO users (name)
VALUES ('山田'), ('村上'), ('大谷'), ('近藤'), ('山本'), ('佐々木'), ('甲斐');
データを確認します。
SELECT * FROM users;
id | name |
---|---|
1 | 山田 |
2 | 村上 |
3 | 大谷 |
4 | 近藤 |
5 | 山本 |
6 | 佐々木 |
7 | 甲斐 |
上記のサンプルデータを使い、これから解説します。
特定のレコードだけをソートする方法
例えば、ID3の大谷を先頭に、ID2の村上を先頭から2番目に並び替える場合、以下のクエリで実現できます。
SELECT * FROM users
ORDER BY id = 3 DESC, id = 2 DESC;
[結果]
id | name |
---|---|
3 | 大谷 |
2 | 村上 |
1 | 山田 |
4 | 近藤 |
5 | 山本 |
6 | 佐々木 |
7 | 甲斐 |
逆にID3の大谷を最後に、ID2の村上を最後から2番目に並び替える場合は以下のクエリで実現できます。
SELECT * FROM users
ORDER BY id = 3 ASC, id = 2 ASC;
[結果]
id | name |
---|---|
1 | 山田 |
4 | 近藤 |
5 | 山本 |
6 | 佐々木 |
7 | 甲斐 |
2 | 村上 |
3 | 大谷 |
このようにクエリのORDER BY部分をORDER BY カラム名 = 値 DESC(ASC)とすることで特定のレコードだけをソートさせることができます。