IT人材をお探しの方は、まずはお電話ください。担当営業がすぐにご要望にマッチした人材をご提案いたします。
tel:03-6409-6766 お急ぎの方はお電話ください

ブログTOP > IT・技術関連 > Salesforce環境にはdistinct句は使えない?重複除外の表示に関してご紹介

Salesforce環境にはdistinct句は使えない?重複除外の表示に関してご紹介

IT・技術関連 更新日:2024.09.05
エンジニア採用
Salesforce環境にはdistinct句は使えない?重複除外の表示に関してご紹介

Salesforce環境におけるクエリ言語SOQLとは? Salesforce Object Query Language(SOQL)とは、Salesforce環境において組織のデータから特定の情報を検索するために使用するクエリ言語です。 SOQLは広く使用されている SQL(Structured Query Language)のSELECTステートメントに似ていますがSalesforce データ専用に設計されています。よって、使用するにおいて、どこが異なるのかを把握しておく必要があります。 また、基本的にSOQLを使用するのは以下の通りです。 ①データがどのオブジェクトに存在しているかを認識しており、次の操作を行う場合は、SOQL を使用します。 ②1 つのオブジェクト、または相互に関連する複数のオブジェクトからデータを取得する。 指定された条件を満たすレコードの数をカウントする。 ③クエリの一部として結果を並び替える。 ④数値、日付、またはチェックボックス項目からデータを取得する。

Salesforce環境(SOQL)における「distinct」句の機能の実現

Salesforce環境でのSOQLとdistinct句の組み合わせを検索すると、「できない」などのネガティブメッセージや、重複除外にとても回りくどいやり方が必要になるような記事がたくさんヒットしてしまいます。もしかして、SOQLには「distinct」句は実装されていないのでしょうか? 結論から先に言いますと、SOQL(Salesforce Object Query Language )には、基本的にSQLにおける指定の重複項目を除外して表示する「select distinct~」分は現在存在しません。 代理策としてSQL、SOQL両方に用意されている「group by」句にて必要項目を指定しグループ化することで重複レコードを除外とします。

distinct句の代わりに「重複除外」として用いるgroup by句とは

「group by」句はSQLにおいては、SELECT文にてデータを取得する時に指定したカラム名の値を基準にグループ化をするのに使用します。この際に項目自体を重複除外してグループ化します。 つまり、必要項目すべてを「group by」句の引数として与えれば、その引数に与えた項目が同一レコードはひとつに集約され、SQL上で「select distinct~」の構文を書くのと同じ処理が可能です。 そして、項目ごとに複数レコードのクエリ結果をグループ化して結果表示を省略できるようにします。 これにより、別途、集計関数である、AVG(平均値を返す)、COUNT(該当レコードの行数を返す)、MIN(最小値を返す)、MAX(最大値を返す)、SUM(項目の合計値を返す)等を用いることができるようになります。 Salesforce環境におけるSOQLもだいたい同様の使い方ができますが、SOQLでは、GROUP BY句を省略して集計関数を使用することが可能です。また、後述する重複をはぶいて数をカウントするCount_distinctという集計関数があります。

集計関数「COUNT_DISTINCT」を使用する際の注意

SQLにおけるテーブル内の重複外レコードをカウントする「COUNT(DISTINCT fieldName)」という構文に対してSalesforce環境のSOQLでは該当する集計関数として「count_distinct」というものがあります。 ただし、注意しなければならない点は、クエリ条件に一致する「null以外」の個別の項目値の数のみを返すということです。例を示します。 下記の内容の「product」、「company」という項目をもつレコードのテーブル「Lead」があるとします。
A1 AAAAA
B2 BBBBB
C3
D4 DDDDD
これをcompany項目にて重複除外した上で項目数をカウントさせるとします。
SELECT COUNT_DISTINCT(company)
FROM Lead
これはnull値である3番目のレコードの項目は数えませんので結果は「3」となります。

null値も含んだ上で照会して項目数をカウントする場合

そこで、null値も含んだ上で照会して項目数をカウントする場合は 「group by」句を使用する必要があります。
SELECT COUNT(company)
FROM Lead
GROUP BY company
この結果はnull値である3番目のレコードの値もカウントされますので「4」となります。

データ検索で今までのSQLとSalesforce環境のSOQLの違いを把握するのが第一歩!

今回は、Salesforce環境にてDMLとして使用するSOQLが完全にはSQLと同じではない!例えば「selrct distinct~」構文はない!ということをご紹介させていただきました。 SQLを参考に作られたと言っても、SOQLは完全にSQLと同じではありません。基本的にレコードの読み込み専用としてSQLのselectコマンドの一部をサポートしている形です。 Salesforce環境は必要に応じて、更新、バージョンアップにて機能は追加されていますので将来的にSQLの機能が実装される可能性はゼロではありませんが、現状ではそこに違いがあることを認識したうえで同じ結果を導き出せる表記法を覚えておくことは大切です。]]>

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニアAWSパートナー/Salesforce認定コンサルティングパートナー 認定企業
ITエンジニア派遣サービス事業を行っています。AWSやSalesforceなど専門領域に特化したITエンジニアが4,715名在籍し、常時100名以上のITエンジニアの即日派遣が可能です。

・2021年:AWS Japan Certification Award 2020 ライジングスター of the Year 受賞
・2022年3月:人材サービス型 AWSパートナー認定
・AWS認定資格保有者数1,154名(2024年6月現在)
・Salesforce認定コンサルティングパートナー
・Salesforce認定資格者276名在籍(2024年5月現在)
・LPIC+CCNA 認定資格者:472 名(2024年6月時点)
ITエンジニアの派遣を利用したい企業様へ
ITエンジニアを派遣で採用したい企業様へ
  • 求人・転職サイトや自社採用サイトを使っているが、自社に合ったITエンジニアが応募してこない…
  • すぐに採用したいが、応募がぜんぜん集まらない
こんな悩みをお持ちの採用・人事担当者の方は、
オープンアップITエンジニアをご検討ください!

当社のITエンジニア派遣サービスは

  • 派遣スピードが速い!(最短即日)
  • 4,500名のエンジニアから貴社にマッチした人材を派遣
  • 正社員雇用も可能

こんな特長があり、貴社の事業やプロジェクトに合った最適なITエンジニアを派遣可能です。
まずは下記ボタンから無料でご相談ください。

無料相談のお申し込みはこちら
IT・技術関連の記事一覧へ

カテゴリから記事を探す

すべての記事一覧へ