結果の集計

組込みの集計関数および順序集計関数を使用して、カウント、合計、平均、最小、最大などの情報を確認します。

例1: LAX空港に特定の時間に到着する予定の受託手荷物の合計数を調べる
SELECT $estdate as ARRIVALDATE, 
count($flight) AS COUNT
FROM BaggageInfo $bag, 
$bag.bagInfo.flightLegs.estimatedArrival $estdate,
$bag.bagInfo.flightLegs.flightNo $flight,  
$bag.bagInfo.flightLegs.fltRouteDest $flt_dest 
WHERE $estdate =any "2019-02-01T11:00:00Z" AND $flt_dest =any "LAX"
GROUP BY $estdate

説明: 航空会社手荷物追跡アプリケーションでは、特定の空港に特定の時間に到着する予定の受託手荷物の合計数を取得できます。フライト区間ごとに、BaggageInfo表のflightLegs配列内のestimatedArrivalフィールドに受託手荷物の到着時間が含まれており、fltRouteDestフィールドに到着地空港コードが含まれています。前述の問合せでは、指定の時間にLAX空港に到着する受託手荷物の合計数を調べるために、まずGROUP BY句を使用して、到着予定時刻の値でデータをグループ化しています。そのグループから、到着地空港がLAXである行のみを選択しています。次に、count関数を使用して、結果となる行の手荷物数を調べています。

ここでは、タイムスタンプ・データ型にキャストせずに、文字列の自然なソート順序により、文字列書式がISO-8601書式である日付を比較できます。$bag.bagInfo.flightLegs.estimatedArrivalおよび$bag.bagInfo.flightLegs.fltRouteDestは順序です。比較演算子'='は複数項目の順序には効果がないため、かわりに順序比較演算子'=any'を使用してestimatedArrivalフィールドとfltRouteDestフィールドを比較します。

出力:
{"ARRIVALDATE":"2019-02-01T11:00:00Z","COUNT":2}
例2: 航空会社手荷物追跡アプリケーションで受託手荷物の数、旅行経路およびフライト数に関する自動メッセージを乗客に表示する
SELECT fullName,
b.baginfo[0].routing,
size(baginfo) AS BAGS,
    CASE
        WHEN seq_count(b.bagInfo[0].flightLegs.flightNo) = 1
        THEN "You have one flight to catch"
        WHEN seq_count(b.bagInfo[0].flightLegs.flightNo) = 2
        THEN "You have two flights to catch"
        WHEN seq_count(b.bagInfo[0].flightLegs.flightNo) = 3
        THEN "You have three flights to catch"
        ELSE "You do not have any travel listed today"
    END AS FlightInfo
FROM BaggageInfo b
WHERE ticketNo = 1762320369957

説明: 航空会社手荷物追跡アプリケーションで、乗客に、今度の旅行のフライト数、受託手荷物の数および経路詳細について素早く確認できるメッセージが表示されると便利です。bagInfo配列には、乗客の受託手荷物詳細が保持されています。bagInfo配列のサイズで、乗客ごとの受託手荷物の数を特定できます。bagInfo内のflightLegs配列には、各移動区間に対応するフライト詳細が含まれています。routingフィールドには、すべての移動断片の空港コードが含まれています。フライトの数は、flightLegs配列内のflightNoフィールドをカウントすることで特定できます。乗客に複数の受託手荷物がある場合、bagInfo配列には、手荷物ごとに1つで、複数の要素があります。このような場合は、乗客データのbagInfoフィールドのすべての要素で、flightLegs配列に同じ値が含まれます。これは、乗客のすべての受託手荷物の到着地が同じであるためです。flightNoフィールドをカウントする際は、bagInfo配列の要素を1つのみ考慮に入れて、結果が重複しないようにする必要があります。この問合せでは、最初の要素(つまりbagInfo[0])のみを考慮に入れています。flightLegs配列には移動断片ごとにflightNoフィールドがあるため、これは順序であり、seq_count関数を使用して乗客ごとのflightNoフィールドの数を特定しています。

フライト数に基づいて異なるメッセージを取り入れるために、CASE文を使用しています。使いやすくするために、問合せでは3つの経由地のみが考慮に入れられています。

出力:
{"fullName":"Lorenzo Phil","routing":"SFO/IST/ATH/JTR","BAGS":2,"FlightInfo":"You have three flights to catch"}