ホームページ > データベース > mysql チュートリアル > PostgreSQLのDISTINCT ON句を使用して各グループの最初の行を見つけるにはどうすればよいですか?

PostgreSQLのDISTINCT ON句を使用して各グループの最初の行を見つけるにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-25 20:17:18
オリジナル
305 人が閲覧しました

How to Find the First Row in Each Group Using PostgreSQL's DISTINCT ON Clause?

各グループの最初の行を見つけます

はじめに

グループデータを処理する場合、各グループの最初の行を抽出する必要があります。このタスクは、PostgreSQLの一意の拡張機能である句を使用して実行できます。

クエリ構造 DISTINCT ON

Grouping_Expression:

グループの定義に使用される式。この句の前面誘導式は、後続の

句の式と一致する必要があります。
<code class="language-sql">SELECT DISTINCT ON (grouping_expression)
       selected_columns
FROM   table_name
ORDER  BY grouping_expression, additional_ordering_expression(s)</code>
ログイン後にコピー

selectd_columns:出力で取得する列。 ORDER BY addational_ordering_expression(s):

各グループの順序を決定するために使用されるオプションの式。これらの式は、句のグループ式の後に従う必要があります。

テーブル:

を検討してください および次のデータ:ORDER BY

総購入金額が最も高い顧客を取得するには、次のお問い合わせを使用してください。

output:purchases

<code class="language-sql">CREATE TABLE purchases (
    id SERIAL PRIMARY KEY,
    customer VARCHAR(50) NOT NULL,
    total NUMERIC(10, 2) NOT NULL
);</code>
ログイン後にコピー

null値

<code class="language-sql">INSERT INTO purchases (customer, total) VALUES
('Joe', 5),
('Sally', 3),
('Joe', 2),
('Sally', 1);</code>
ログイン後にコピー
グループ値にヌル値が含まれている場合は、優先処理が非ヌル値を持っていることを確認して、

句に

を追加することをお勧めします:
<code class="language-sql">SELECT DISTINCT ON (customer)
       id, customer, total
FROM   purchases
ORDER  BY customer, total DESC, id;</code>
ログイン後にコピー

他の列を選択を選択します リストは、グループの表現に限定されません。他の列を含めることができます。これにより、このテクノロジーは複雑なサブクエリまたは集計/ウィンドウ関数を置き換えることができます。

<code>id | customer | total
-----------------------------
1  | Joe      | 5
2  | Sally    | 3</code>
ログイン後にコピー
パフォーマンスの注意事項

クエリの効率は、データの分布と各グループの行数に依存します。小グループの場合、通常は非常に効率的です。ただし、大規模なグループの場合、次のリンクで説明されている代替技術は、パフォーマンスを向上させる場合があります。

ORDER BY postgresqlの距離を選択する距離は予想よりも遅いNULLS LAST

<code class="language-sql">ORDER  BY customer, total DESC NULLS LAST, id;</code>
ログイン後にコピー
クエリごとにグループを最適化して、各ユーザーの最新行を取得

各ラインの最後のn関連のニバーをお問い合わせくださいSELECT

以上がPostgreSQLのDISTINCT ON句を使用して各グループの最初の行を見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート