SQL文字列集計関数

Sql Wen Zi Lie Ji Ji Guan Shu



SQL データベースを扱ったことがある場合は、おそらく集計関数に精通しているでしょう。これらは本質的に、一連の値に対して計算を実行し、単一の結果を返す一連の関数です。

例には、SUM()、AVG()、COUNT()、MAX、MIN() などの関数が含まれます。ただし、SQL の集計関数に関して気付くことの 1 つは、それらが数値演算を対象としているということです。

しかし、文字列値を処理する集計関数があることをご存知ですか?このチュートリアルでは、これらの関数とその仕組み、およびデータベースでの使用方法について説明します。







注: この記事で説明する関数のほとんどは標準 SQL の一部ではないことに注意してください。その結果、これらは PostgreSQL、SQL Server などのさまざまなデータベース エンジンの拡張機能となります。



文字列集計関数とは何ですか?

文字列集計関数は、グループまたは行内の一連の文字列に対して集計操作を実行し、単一の結果を返す関数のセットです。



これらの関数を主に GROUP BY 句とともに使用して、特定の列に基づいて行をグループ化し、各グループ内の文字列を集計します。





一般的な文字列集計関数には次のようなものがあります。

  • GROUP_CONCAT() – PostgreSQL と MySQL
  • STRING_AGG – SQL サーバー
  • ARRAY_AGG – PostgreSQL
  • LISTAGG – オラクル

それぞれの機能とそれが提供するものを見てみましょう。



GROUP_CONCAT()

GROUP_CONCAT() 関数は、PostgreSQL および MySQL データベースでサポートされています。これにより、複数の行の値を 1 つの文字列に連結できます。

次のような「employees」テーブルがあるとします。

CREATE TABLE 従業員 (
従業員 ID INT AUTO_INCREMENT 主キー、
first_name VARCHAR(50)、
last_name VARCHAR(50)、
部門 VARCHAR(50)
);

INSERT INTO 従業員 (名、姓、部門) VALUES
(「アリス」、「スミス」、「人事」)、
(「ボブ」、「ジョンソン」、「マーケティング」)、
(「チャーリー」、「ウィルソン」、「ファイナンス」)、
(「デイビッド」、「ブラウン」、「セールス」)、
(「エヴァ」、「デイビス」、「エンジニアリング」);

出力:

名を取得し、姓を連結することによって従業員のフルネームを特定したい場合は、次の例に示すように GROUP_CONCAT() 関数を使用できます。

選択する
部門、
GROUP_CONCAT(first_name, ' ', last_name) AS full_name
から
従業員
グループ化
部門;

この場合、関数を使用して「first_name」列と「last_name」列の文字列を連結し、空の文字列を使用して名前にスペースを追加します。

これには、各部門の従業員のリストが含まれます。

STRING_AGG

この関数は GROUP_CONCAT() 関数に似ていますが、SQL Server データベースでのみサポートされます。

使用例は次のとおりです。

選択する
部門、
STRING_AGG(名、姓、' ') AS フルネーム
から
従業員
グループ化
部門;

これにより、指定された列に対してスペースを区切り文字として文字列連結が実行されます。

ARRAY_AGG

ARRAY_AGG 関数は、PostgreSQL データベースでのみ使用できます。これにより、値を 1 つの配列に集約できます。

例は次のとおりです。

選択する
部門、
ARRAY_AGG(first_name) AS 従業員リスト
から
従業員
グループ化
部門;

これにより、従業員名が配列として集約されます。

リストタグ()

LISTAGG() 関数は、Oracle データベースでのみ使用できます。これにより、指定された区切り文字を使用して値を 1 つの文字列に連結できます。

例は次のとおりです。

SELECT 部門、LISTAGG(first_name, last_name, ' ') WITHIN GROUP (ORDER BY 従業員名 ASC) AS 従業員
従業員から
部門ごとにグループ化。

これにより、従業員の名前と指定された区切り文字が連結されます。

結論

このチュートリアルでは、文字列値のリストを提供し、結果として得られる単一の文字列値への演算を実行できるようにする文字列集計関数について学びました。