別の集約によって生成された出力に対して HAVINGを使用します。この HAVING 句は、式に作用して応答に表示される間隔を決定します。式で指定したメトリックは数値にする必要があります。式は、HAVING 句が機能するブール値を返す必要があります。 

さらに、 HAVING 句は、次のようにクエリ内のエイリアスによって参照される必要があります。

SELECT customerName, count(*) as Requests, avg(responseTime) as ResponseTime FROM transactions HAVING Requests > 10000

where Requests クエリで参照されているエイリアスです。 

構文

 SELECT selectItems
    FROM relation
    WHERE where=booleanExpression
    SINCE statement
    HAVING havingClause
    ORDER BY sortItems
    LIMIT limits
   ;

ここで、havingClauseブール式です。WHEREORDER BYLIMIT 句および SINCE statement はオプションです。

HAVING 句の例

以下のフィルタを使用した HAVING 句の例:

単純な比較フィルタ

SELECT transactionName, avg(responseTime) as AVRT FROM type HAVING AVRT > 0

単純な範囲フィルタ

SELECT transactionName, avg(responseTime) as AVRT FROM type HAVING AVRT BETWEEN [10, 90)

簡易リストフィルタ

SELECT transactionName, avg(responseTime) as AVRT FROM type HAVING AVRT IN (20, 30, 40, 60)

複合フィルタ

SELECT transactionName, avg(responseTime) as AVRT FROM type HAVING AVRT > 20 AND AVRT < 90
SELECT transactionName, avg(responseTime) as AVRT FROM type HAVING AVRT < 20 OR AVRT > 90
SELECT transactionName, avg(responseTime) as AVRT FROM type HAVING AVRT > 20 AND AVRT < 90 AND AVRT IN (70, 80)

NOT フィルタ

SELECT transactionName, avg(responseTime) as AVRT FROM type HAVING NOT AVRT &gt; 50

NOT 複合フィルタ

SELECT transactionName, avg(responseTime) as AVRT FROM type HAVING NOT (AVRT > 20 AND AVRT < 90)

マルチメトリックフィルタ

SELECT transactionName, avg(responseTime) as AVRT, max(responseTime) as MAXRT FROM type HAVING NOT (AVRT > 20 AND AVRT < 90) AND MAXRT > 130

制限事項

HAVING 句は、次の場合はサポートされていません。

  • Elasticsearch のネストされたフィールド
  • 複数のメトリック関数(percentilesstdev など)
  • フィルタリングされたメトリック関数(フィルタ機能)
  • 無効なクエリ:
サポート対象外の条件/フィルタクエリ(Queries)
他のSELECT transactionName, avg(responseTime) as AVRT FROM transactions HAVING AVRT LIKE '10'
ExistsSELECT transactionName, avg(responseTime) as AVRT FROM transactions HAVING AVRT IS NOT NULL
エイリアスなし

SELECT avg(responseTime) as avtr FROM type HAVING avg(responseTime) > 10

SELECT txName, count(*), node, count(*) FROM transactions HAVING count(*) > 10

ネストSELECT transactionId, AVG(segments.numCalls) as av_numCalls, MIN(segments.numCalls), MAX(segments.numCalls), SUM(segments.numCalls) FROM transactions HAVING av_numCalls > 2
フィルタ機能SELECT appraisalrating, filter(min(salary), where salary > 60000) as val FROM transactions HAVING val > 60000
複数値のメトリック関数パーセンタイル:

SELECT appraisalrating, percentile(salary, 94) as per_sal FROM transactions HAVING per_sal > 2 ORDER By appraisalrating

 標準偏差:

SELECT appraisalrating, stdev(salary) as stdev_sal FROM transactions HAVING stdev_sal > 2 ORDER By appraisalrating

親集約がありませんSELECT avg(responseTime) as AVRT FROM transactions HAVING AVRT > 2
引用符で囲まれたエイリアスSELECT series(eventTimestamp, "1d"), avg(responseTime/1000) AS "Response Time" FROM transactions WHERE transactionName = "TransactionName" HAVING "Response Time" > 50