小ネタ:【Salesforce】SOQLでCount関数を使用するとき、order byやgroup by は使用できない

こんにちは、TRYT開発課の成阪です。

Salesforceと連携するプログラムをつくっていた際に、一瞬ハマりました。 小ネタですが、忘れないようにメモとして残しておきます。

結論

COUNT(*) ではなく、COUNT(fieldname) は使用できるので、 COUNT(fieldname)を使用するか、削除できるのであれば ORDER BYGROUP BYを削除しましょう。

発端

データ取得するクエリのSELECT句とLIMIT句だけを変更して、処理対象の総件数を取得したかったのですが、ORDER BYが指定された状態では、エラーとなってしまいました。

-- データ取得
SELECT id, name, FROM Account ORDER BY id DESC LIMIT 10;

-- 件数取得(エラー)
SELECT COUNT(*) FROM Account ORDER BY id;

-- 件数取得(解決パターンA)
SELECT COUNT(*) FROM Account;
-- 件数取得(解決パターンB)
SELECT COUNT(id) FROM Account ORDER BY id;

参考

API バージョン 19.0 以降では、COUNT() と GROUP BY 句は一緒に使用できません。代わりに COUNT(fieldName) を使用します。

COUNT() および COUNT(fieldName) | SOQL および SOSL リファレンス | Salesforce Developers