PostgreSQL の Order by 句

Bilal Shahid 2024年2月15日
  1. PostgreSQL ORDER BY
  2. PostgreSQL ORDER BY 句の使用
  3. PostgreSQL ORDER BY 句の使用を示すコード例
PostgreSQL の Order by 句

今日の記事では、テーブルの属性に基づいてテーブルの結果を並べ替える方法について説明します。 また、ORDER BY 句を使用してデータをソートする方法も示しています。 このコマンドを理解することから始めましょう。

PostgreSQL ORDER BY

それを理解するために、SELECT ステートメントについて説明しましょう。 クエリに SELECT ステートメントを記述すると、指定されたテーブルのステートメントに基づいてすべてのデータが返されます。

その結果のデータは、指定された順序なしで返されます。 データを特定の順序にしたい場合はどうすればよいでしょうか? SELECTステートメントでORDER BYコマンドを使用します。

ORDER BY コマンドを使用すると、テーブルの 1つまたは複数の属性に基づいてデータを並べ替えることができます。 その属性セットを使用して、昇順または降順で並べ替えることもできます。

これで、PostgreSQL の ORDER BY コマンドを理解できたので、その使用に移りましょう。

PostgreSQL ORDER BY 句の使用

ORDER BY コマンドは、SELECT ステートメントと FROM ステートメントの後に、クエリの残りの部分と共に記述されます。 このコマンドを使用するために知っておく必要がある重要な詳細がいくつかあります。

最初に、結果を並べ替えるためのパラメーターとして使用する列または列のセットを決定します。 解決しようとしている問題の範囲によって異なります。

この記事の後半で例を使用して説明します。 覚えておくべき重要な構文の詳細は、複数の属性をパラメーターとして使用する場合はコンマ (,) を使用することです。

単一パラメータの構文:

ORDER BY column_name;

複数のパラメータの構文:

ORDER BY column1_name, column2_name;

複数のパラメーターが使用されている場合、ORDER BY 句は、最初のパラメーターに従って最初にデータセットをチェックすることに注意してください。

2つの値が最初のパラメーターに従って正確に順序付けされている場合、2 番目のパラメーターを使用してその類似性を排除し、結果のデータを並べ替えます。

次に、結果のデータを属性に基づいて昇順または降順で並べ替えることができます。 キーワード ASCDESC は、それぞれ昇順または降順でソートするかどうかを定義します。

どちらも指定しない場合、デフォルトで昇順で並べられます。

昇順でソートするための構文:

ORDER BY column1_name ASC;

降順でソートするための構文:

ORDER BY column1_name DESC;

昇順と降順を一緒にソートするための構文:

ORDER BY column1_name ASC, column2_name DESC;

最後に、ORDER BY 句でパラメーターとして使用される属性/列に NULL データがある場合です。 NULL 値を他の値の前または後に配置するかどうかを指定できます。

この操作には、キーワード NULLS LAST および NULLS FIRST が使用されます。 ASC オプションを使用すると、デフォルトで NULLS LAST が選択されます。

一方、DESC オプションを使用すると、デフォルトで NULLS FIRST が選択されます。 キーワードを追加することで、必要に応じて変更できます。

NULL 値を最初に置く構文:

ORDER BY column1_name ASC NULLS FIRST;

末尾に NULL 値を配置するための構文:

ORDER BY column1_name DESC NULLS LAST;

PostgreSQL ORDER BY 句の使用を示すコード例

例を通して説明するために、まず次のようにテーブルを作成します。

create table Orders(
    id int,
    name varchar(30) not null,
    OrderAmount int not null,
    constraint pk_customer primary key (id)
);

insert into Orders 
values
(1,'Ben', 250),
(2, 'James', 350),
(3, 'Carl', 550),
(4, 'Adam', 550);

select * from Orders;

出力:

postgresql の order by 句 - テーブルの作成

テーブルが作成されたので、ORDER BY コマンドを使用するすべての可能な方法 (上記で説明) を示しましょう。

1つの式を使用する PostgreSQL ORDER BY コマンド

次のコードは、注文の価格でソートされたOrdersテーブルから顧客の名前と合計支出を表示します。

OrderAmountの昇順の場合

SELECT name, OrderAmount
FROM Orders
ORDER BY OrderAmount ASC;

出力:

postgresql の order by 句 - 価格の昇順でソート

OrderAmount の降順の場合

SELECT name, OrderAmount
FROM Orders
ORDER BY OrderAmount DESC;

出力:

postgresql の order by 句 - 価格の降順でソート

複数の式を使用した PostgreSQL ORDER BY コマンド

次のコードは、注文の価格と顧客名でソートされた Orders テーブルから顧客の名前と合計支出を表示します。

昇順で並べ替え

SELECT name, OrderAmount
FROM Orders
ORDER BY OrderAmount, name;

出力:

postgresql の order by 句 - 価格と顧客名の昇順で並べ替え

降順で並べ替える

SELECT name, OrderAmount
FROM Orders
ORDER BY OrderAmount DESC, name DESC;

出力:

postgresql の order by 句 - 価格と顧客名の降順で並べ替え

昇順と降順の両方

SELECT name, OrderAmount
FROM Orders
ORDER BY OrderAmount DESC, name ASC;

出力:

postgresql の order by 句 - 価格と顧客名の昇順と降順で並べ替え

NULL 属性値を指定した PostgreSQL ORDER BY コマンド

以下に示す例では、null 値を持つ新しいテーブルを使用します。

create table NULLTEST(
    name varchar(30) not null,
    number_ int
);

insert into NULLTEST
values 
('Jack', 250),
('Maguire', 350),
('Walker', 550),
('Michael', NULL);

select * from NULLTEST;

出力:

postgresql の句による順序 - null 属性を持つコマンドによる順序

次のコードは、namenumber_number_ 列の値でソートし、NULL 値を最初に表示します。

SELECT name, number_
FROM NULLTEST
ORDER BY number_ ASC NULLS FIRST;

出力:

postgresql の order by 句 - 最初に null 値でソート

ORDER BY の降順オプションで NULL FIRST を使用する必要はありません。この場合、デフォルトで NULL 値が最初に表示されるからです。 次のコードは、namenumber_number_ 列の値でソートし、NULL 値を表示します。

SELECT name, number_
FROM NULLTEST
ORDER BY number_ DESC NULLS LAST;

postgresql の order by 句 - 最後に null 値でソート

ここで、NULLS LAST を昇順オプション ORDER BY とともに使用する必要はありません。この場合、デフォルトで NULL 値が最後に表示されるからです。

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub