데이터 정렬 및 제한

예제와 함께 따르려면 를 참조하여 샘플 데이터를 보고 스크립트를 사용하여 테스트할 샘플 데이터를 로드합니다. 스크립트는 예제에 사용된 테이블을 생성하고 테이블로 데이터를 로드합니다.

예제와 함께 따르려면 쿼리를 실행할 샘플 데이터를 참조하여 샘플 데이터를 보고 OCI 콘솔을 사용하여 예제 테이블을 생성하고 JSON 파일을 사용하여 데이터를 로드하는 방법을 알아봅니다.

정렬 결과

ORDER BY 절을 사용하여 열, Primary Key 또는 Non-primary 키별로 결과를 정렬합니다.

예 1: 모든 승객의 티켓 번호를 전체 이름으로 정렬합니다.
SELECT bag.ticketNo, bag.fullName 
FROM BaggageInfo bag 
ORDER BY bag.fullName

설명: 승객의 전체 이름을 기준으로 BaggageInfo 스키마에서 승객의 티켓 번호를 오름차순으로 정렬합니다.

출력:
{"ticketNo":1762344493810,"fullName":"Adam Phillips"}
{"ticketNo":1762392135540,"fullName":"Adelaide Willard"}
{"ticketNo":1762376407826,"fullName":"Dierdre Amador"}
{"ticketNo":1762355527825,"fullName":"Doris Martin"}
{"ticketNo":1762324912391,"fullName":"Elane Lemons"}
{"ticketNo":1762350390409,"fullName":"Fallon Clements"}
{"ticketNo":1762341772625,"fullName":"Gerard Greene"}
{"ticketNo":176234463813,"fullName":"Henry Jenkins"}
{"ticketNo":1762383911861,"fullName":"Joanne Diaz"}
{"ticketNo":1762377974281,"fullName":"Kendal Biddle"}
{"ticketNo":1762355854464,"fullName":"Lisbeth Wampler"}
{"ticketNo":1762320369957,"fullName":"Lorenzo Phil"}
{"ticketNo":1762320569757,"fullName":"Lucinda Beckman"}
{"ticketNo":1762340683564,"fullName":"Mary Watson"}
{"ticketNo":1762330498104,"fullName":"Michelle Payne"}
{"ticketNo":1762348904343,"fullName":"Omar Harvey"}
{"ticketNo":1762399766476,"fullName":"Raymond Griffin"}
{"ticketNo":1762311547917,"fullName":"Rosalia Triplett"}
{"ticketNo":1762357254392,"fullName":"Teena Colley"}
{"ticketNo":1762390789239,"fullName":"Zina Christenson"}
{"ticketNo":1762340579411,"fullName":"Zulema Martindale"}
예 2: 마지막으로 본 스테이션이 MEL인 승객(이름별로 정렬됨)에 대한 승객 세부정보(성명, 태그 번호)를 마지막으로 본 시간(최근 처음)별로 인출합니다.
SELECT bag.fullName, bag.bagInfo[].tagNum, 
bag.bagInfo[].lastSeenTimeGmt
FROM BaggageInfo bag 
WHERE bag.bagInfo[].lastSeenStation=any "MEL"
ORDER BY bag.bagInfo[].lastSeenTimeGmt DESC
설명: 먼저 마지막으로 확인된 스테이션을 기준으로 BaggageInfo 테이블에서 데이터를 필터링하고 최종 확인 시간과 승객의 전체 이름을 기준으로 필터링된 결과를 내림차순으로 정렬합니다. 이 작업은 ORDER BY 절을 사용하여 수행합니다.

주:

두 개 이상의 열을 사용하여 질의 출력을 정렬할 수 있습니다.
출력:
{"fullName":"Adam Phillips","tagNum":"17657806255240","lastSeenTimeGmt":"2019-02-01T16:13:00Z"}
{"fullName":"Zina Christenson","tagNum":"17657806228676","lastSeenTimeGmt":"2019-02-04T10:08:00Z"}
{"fullName":"Joanne Diaz","tagNum":"17657806292518","lastSeenTimeGmt":"2019-02-16T16:13:00Z"}
{"fullName":"Zulema Martindale","tagNum":"17657806288937","lastSeenTimeGmt":"2019-02-25T20:15:00Z"}

결과 제한 및 오프셋

LIMIT 절을 사용하여 SELECT 문에서 반환되는 결과 수를 제한합니다. 예를 들어, 테이블에 1000개의 행이 있는 경우 LIMIT 값을 지정하여 반환할 행 수를 제한합니다. ORDER BY 절과 함께 LIMIT 및 OFFSET를 사용할 것을 권장합니다. 그렇지 않으면 결과가 임의 순서로 반환되어 예측할 수 없는 결과가 생성됩니다.

LIMIT 및 OFFSET 사용 시의 적절한 사용 사례/예제에는 결과를 페이징하는 응용 프로그램이 있습니다. 예를 들어, 응용 프로그램이 페이지당 4개의 결과를 표시하려고 한다고 가정합니다. limit 및 offset을 사용하여 응용 프로그램에서 Stateless 페이징을 구현할 수 있습니다. 페이지당 n(예: 4 ) 결과를 표시하는 경우 m 페이지(예: 2)에 대한 결과가 표시되고 이 예에서는 오프셋(n*m-1)이 4이고 제한은 n(여기에서는 4)이 됩니다.

예 1: 애플리케이션에서 페이지에 4개의 결과를 표시할 수 있습니다. 마지막으로 본 스테이션이 JTR인 승객의 첫번째 페이지에서 애플리케이션이 인출한 세부정보를 인출합니다.
SELECT $bag.fullName, $bag.bagInfo.tagNum, $flt_time
FROM BaggageInfo $bag, 
$bag.bagInfo[].lastSeenTimeGmt $flt_time
WHERE $bag.bagInfo[].lastSeenStation=any "JTR" 
ORDER BY $flt_time LIMIT 4

설명: 마지막 확인 스테이션을 기준으로 BaggageInfo 테이블의 데이터를 필터링하고 마지막 확인 시간을 기준으로 결과를 정렬합니다. 중첩되지 않은 배열을 사용하여 데이터를 평평하게 만듭니다. 즉, bagInfo 배열이 단순화되고 마지막으로 확인된 시간이 인출됩니다. 결과 집합에서 처음 4개 행만 표시하면 됩니다.

출력:
{"fullName":"Michelle Payne","tagNum":"17657806247861","flt_time":"2019-02-02T23:59:00Z"}
{"fullName":"Gerard Greene","tagNum":"1765780626568","flt_time":"2019-03-07T16:01:00Z"}
{"fullName":"Lorenzo Phil","tagNum":["17657806240001","17657806340001"],"flt_time":"2019-03-12T15:05:00Z"}
{"fullName":"Lucinda Beckman","tagNum":"17657806240001","flt_time":"2019-03-12T15:05:00Z"}
예 2: 애플리케이션에서 페이지에 4개의 결과를 표시할 수 있습니다. 마지막으로 본 스테이션이 JTR인 승객에 대해 두번째 페이지에서 애플리케이션이 인출한 세부정보를 인출합니다.
SELECT $bag.fullName, $bag.bagInfo.tagNum, $flt_time 
FROM BaggageInfo $bag, 
$bag.bagInfo[].lastSeenTimeGmt $flt_time 
WHERE $bag.bagInfo[].lastSeenStation=any "JTR" 
ORDER BY $flt_time LIMIT 4 OFFSET 4

설명: 마지막 확인 스테이션을 기준으로 BaggageInfo 테이블의 데이터를 필터링하고 마지막 확인 시간을 기준으로 결과를 정렬합니다. 중첩되지 않은 배열을 사용하여 데이터를 평평하게 만듭니다. OFFSET 4를 설정하도록 두번째 페이지의 내용을 표시해야 합니다. 네 개의 행으로 제한해도 총 결과 집합이 5개이므로 하나의 행만 표시됩니다. 처음 몇 개는 건너뛰고 다섯번째는 표시됩니다.

출력:
{"fullName":"Lorenzo Phil","tagNum":["17657806240001","17657806340001"],
"flt_time":"2019-03-12T16:05:00Z"}

그룹화 결과

GROUP BY 절을 사용하여 하나 이상의 테이블 열로 결과를 그룹화합니다. 일반적으로 GROUP BY 절은 COUNT, SUM 및 AVG와 같은 집계 표현식과 함께 사용됩니다.

예 1: 각 예약에 대한 가방 수를 표시합니다.
SELECT bag.confNo, 
count(bag.bagInfo) AS TOTAL_BAGS 
FROM BaggageInfo bag 
GROUP BY bag.confNo

설명: 모든 승객에게 하나의 예약 코드(confNo)가 있습니다. 승객은 하나 이상의 수하물을 가질 수 있습니다. 여기에서 예약 코드를 기반으로 데이터를 그룹화하고 예약 당 가방 수를 제공하는 bagInfo 배열의 수를 얻습니다.

출력:
{"confNo":"FH7G1W","TOTAL_BAGS":1}
{"confNo":"PQ1M8N","TOTAL_BAGS":1}
{"confNo":"XT6K7M","TOTAL_BAGS":1}
{"confNo":"DN3I4Q","TOTAL_BAGS":1}
{"confNo":"QB1O0J","TOTAL_BAGS":1}
{"confNo":"TX1P7E","TOTAL_BAGS":1}
{"confNo":"CG6O1M","TOTAL_BAGS":1}
{"confNo":"OH2F8U","TOTAL_BAGS":1}
{"confNo":"BO5G3H","TOTAL_BAGS":1}
{"confNo":"ZG8Z5N","TOTAL_BAGS":1}
{"confNo":"LE6J4Z","TOTAL_BAGS":1}
{"confNo":"XT1O7T","TOTAL_BAGS":1}
{"confNo":"QI3V6Q","TOTAL_BAGS":2}
{"confNo":"RL3J4Q","TOTAL_BAGS":1}
{"confNo":"HJ4J4P","TOTAL_BAGS":1}
{"confNo":"CR2C8MY","TOTAL_BAGS":1}
{"confNo":"LN0C8R","TOTAL_BAGS":1}
{"confNo":"MZ2S5R","TOTAL_BAGS":1}
{"confNo":"KN4D1L","TOTAL_BAGS":1}
{"confNo":"MC0E7R","TOTAL_BAGS":1}
예 2: 각 공항에서 출발하는 총 수하물을 선택합니다(수하물 제외).
SELECT $flt_src as SOURCE, 
count(*) as COUNT 
FROM BaggageInfo $bag, 
$bag.bagInfo.flightLegs[0].fltRouteSrc $flt_src 
GROUP BY $flt_src

설명: 각 공항에서 출발하는 총 수하물 수를 가져오려고 합니다. 그러나 교통의 일부인 공항을 고려하고 싶지 않습니다. 따라서 첫번째 레코드가 소스이므로 flightLegs 배열의 첫번째 레코드에 있는 Flight Source 값으로 데이터를 그룹화합니다. 그런 다음 수하물 수를 결정합니다.

출력:
{"SOURCE":"SFO","COUNT":6}
{"SOURCE":"BZN","COUNT":1}
{"SOURCE":"GRU","COUNT":1}
{"SOURCE":"LAX","COUNT":1}
{"SOURCE":"YYZ","COUNT":1}
{"SOURCE":"MEL","COUNT":1}
{"SOURCE":"MIA","COUNT":4}
{"SOURCE":"MSQ","COUNT":2}
{"SOURCE":"MXP","COUNT":2}
{"SOURCE":"JFK","COUNT":3}

집계 결과

내장 집계 및 시퀀스 집계 함수를 사용하여 개수, 합계, 평균, 최소 또는 최대와 같은 정보를 찾습니다.

예 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 함수를 사용하여 결과 행에 대한 bagCount를 확인합니다.

여기서 문자열을 시간 기록 데이터 유형으로 변환할 필요 없이 문자열의 자연스러운 정렬 순서로 인해 ISO-8601 형식의 문자열 형식 날짜를 비교할 수 있습니다. $bag.bagInfo.flightLegs.estimatedArrival$bag.bagInfo.flightLegs.fltRouteDest는 시퀀스입니다. 비교 표현식 '='는 둘 이상의 항목 시퀀스에 대해 작동할 수 없으므로 시퀀스 비교 연산자 '=any'는 estimatedArrivalfltRouteDest 필드를 비교하는 데 대신 사용됩니다.

출력:
{"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 배열의 크기는 승객당 체크 백 수를 결정합니다. bagInfoflightLegs 배열에는 각 여행 구간에 해당하는 항공편 세부정보가 포함됩니다. 라우팅 필드에는 모든 출장 단편의 공항 코드가 포함됩니다. flightLegs 배열의 flightNo 필드를 계산하여 항공편 수를 결정할 수 있습니다. 승객이 두 개 이상의 체크 백을 가지고 있는 경우 bagInfo 배열에는 각 가방마다 하나씩 두 개 이상의 요소가 있습니다. 이 경우 승객 데이터의 bagInfo 필드에 있는 모든 요소의 flightLegs 배열에 동일한 값이 포함됩니다. 이것은 승객의 모든 체크된 가방의 목적지가 동일하기 때문입니다. flightNo 필드를 계산하는 동안 결과가 중복되지 않도록 bagInfo 배열의 한 요소만 고려해야 합니다. 이 질의에서는 첫번째 요소(bagInfo[0])만 고려합니다. flightLegs 배열에는 각 출장 프래그먼트에 대한 flightNo 필드가 있으므로 순서이며 seq_count 함수를 사용하여 승객당 flightNo 필드의 수를 결정합니다.

CASE 문을 사용하여 비행 횟수에 따라 다른 메시지를 삽입합니다. 사용 편의성을 위해 쿼리에서 세 번의 전송만 고려됩니다.

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

QueryRequest API 사용 예제

QueryRequest API를 사용하여 데이터를 그룹화 및 정렬하고 NoSQL 테이블에서 인출할 수도 있습니다.

질의를 실행하려면 NoSQLHandle.query() API를 사용합니다.

GroupSortData.java 예제에서 전체 코드 를 다운로드하십시오.
 //Fetch rows from the table
private static void fetchRows(NoSQLHandle handle,String sqlstmt) throws Exception {
   try (
      QueryRequest queryRequest = new QueryRequest().setStatement(sqlstmt);
      QueryIterableResult results = handle.queryIterable(queryRequest)){
      for (MapValue res : results) {
         System.out.println("\t" + res);
      }
   }
} 
String orderby_stmt="SELECT bag.fullName, bag.bagInfo[].tagNum,bag.bagInfo[].lastSeenTimeGmt FROM BaggageInfo bag "+
                             "WHERE bag.bagInfo[].lastSeenStation=any \"MEL\" ORDER BY bag.bagInfo[].lastSeenTimeGmt DESC";
System.out.println("Using ORDER BY to sort data ");
fetchRows(handle,orderby_stmt);
String sortlimit_stmt="SELECT $bag.fullName, $bag.bagInfo.tagNum, $flt_time FROM BaggageInfo $bag, "+
                       "$bag.bagInfo[].lastSeenTimeGmt $flt_time WHERE $bag.bagInfo[].lastSeenStation=any \"JTR\""+
                       "ORDER BY $flt_time LIMIT 4";
System.out.println("Using ORDER BY and LIMIT to sort and limit data ");
fetchRows(handle,sortlimit_stmt);
String groupsortlimit_stmt="SELECT $flt_src as SOURCE,count(*) as COUNT FROM BaggageInfo $bag, "+
                           "$bag.bagInfo.flightLegs[0].fltRouteSrc $flt_src GROUP BY $flt_src";
System.out.println("Using GROUP BY, ORDER BY and LIMIT to group, sort and limit data ");
fetchRows(handle,groupsortlimit_stmt);

질의를 실행하려면 borneo.NoSQLHandle.query() 메소드를 사용합니다.

GroupSortData.py 예제에서 전체 코드 를 다운로드하십시오.
# Fetch data from the table
def fetch_data(handle,sqlstmt):
   request = QueryRequest().set_statement(sqlstmt)
   print('Query results for: ' + sqlstmt)
   result = handle.query(request)
   for r in result.get_results():
      print('\t' + str(r))  
orderby_stmt = '''SELECT bag.fullName, bag.bagInfo[].tagNum,bag.bagInfo[].lastSeenTimeGmt FROM BaggageInfo bag
                     WHERE bag.bagInfo[].lastSeenStation=any \"MEL\" ORDER BY bag.bagInfo[].lastSeenTimeGmt DESC'''
print('Using ORDER BY to sort data:')
fetch_data(handle,orderby_stmt)

sortlimit_stmt = '''SELECT $bag.fullName, $bag.bagInfo.tagNum, $flt_time FROM BaggageInfo $bag,
                    $bag.bagInfo[].lastSeenTimeGmt $flt_time
                    WHERE $bag.bagInfo[].lastSeenStation=any "JTR"
                    ORDER BY $flt_time LIMIT 4'''
print('Using ORDER BY and LIMIT to sort and limit data:')
fetch_data(handle,sortlimit_stmt)

groupsortlimit_stmt = '''SELECT $flt_src as SOURCE, count(*) as COUNT FROM BaggageInfo $bag,
                         $bag.bagInfo.flightLegs[0].fltRouteSrc $flt_src GROUP BY $flt_src'''
print('Using GROUP BY, ORDER BY and LIMIT to group, sort and limit data:')
fetch_data(handle,groupsortlimit_stmt)   

질의를 실행하려면 Client.Query 함수를 사용합니다.

GroupSortData.go 예제에서 전체 코드 를 다운로드하십시오.
 //fetch data from the table
func fetchData(client *nosqldb.Client, err error, tableName string, querystmt string)(){
   prepReq := &nosqldb.PrepareRequest{
		Statement: querystmt,
   }
   prepRes, err := client.Prepare(prepReq)
   if err != nil {
      fmt.Printf("Prepare failed: %v\n", err)
      return
   }
   queryReq := &nosqldb.QueryRequest{
		 PreparedStatement: &prepRes.PreparedStatement,   }
   var results []*types.MapValue
   for {
      queryRes, err := client.Query(queryReq)
      if err != nil {
         fmt.Printf("Query failed: %v\n", err)
  	return
      }
      res, err := queryRes.GetResults()
      if err != nil {
         fmt.Printf("GetResults() failed: %v\n", err)
  	return
      }
      results = append(results, res...)
      if queryReq.IsDone() {
         break
      }
   }
   for i, r := range results {
      fmt.Printf("\t%d: %s\n", i+1, jsonutil.AsJSON(r.Map()))
   }
} 
orderby_stmt := `SELECT bag.fullName, bag.bagInfo[].tagNum,bag.bagInfo[].lastSeenTimeGmt FROM BaggageInfo bag
                    WHERE bag.bagInfo[].lastSeenStation=any "MEL" ORDER BY bag.bagInfo[].lastSeenTimeGmt DESC`
fmt.Printf("Using ORDER BY to sort data::\n")
fetchData(client, err,tableName,orderby_stmt)

sortlimit_stmt := `SELECT $bag.fullName, $bag.bagInfo.tagNum, $flt_time FROM BaggageInfo $bag,
                   $bag.bagInfo[].lastSeenTimeGmt $flt_time
                   WHERE $bag.bagInfo[].lastSeenStation=any "JTR"
                   ORDER BY $flt_time LIMIT 4`
fmt.Printf("Using ORDER BY and LIMIT to sort and limit data::\n")
fetchData(client, err,tableName,sortlimit_stmt)

groupsortlimit_stmt := `SELECT $flt_src as SOURCE, count(*) as COUNT FROM BaggageInfo $bag,
                        $bag.bagInfo.flightLegs[0].fltRouteSrc $flt_src GROUP BY $flt_src`
fmt.Printf("Using GROUP BY, ORDER BY and LIMIT to group, sort and limit data::\n")
fetchData(client, err,tableName,groupsortlimit_stmt)

질의를 실행하려면 query 메소드를 사용합니다.

JavaScript: GroupSortData.js 예제에서 GroupSortData.js 전체 코드를 다운로드합니다.
  //fetches data from the table
async function fetchData(handle,querystmt) {
   const opt = {};
   try {
      do {
         const result = await handle.query(querystmt, opt);
         for(let row of result.rows) {
            console.log('  %O', row);
         }
         opt.continuationKey = result.continuationKey;
      } while(opt.continuationKey);
   } catch(error) {
      console.error('  Error: ' + error.message);
   }
}
TypeScript: GroupSortData.ts 예제에서 GroupSortData.ts 전체 코드를 다운로드합니다.
interface StreamInt {
   acct_Id: Integer;
   profile_name: String;
   account_expiry: TIMESTAMP;
   acct_data: JSON;
}
/* fetches data from the table */
async function fetchData(handle: NoSQLClient,querystmt: string) {
   const opt = {};
   try {
      do {
         const result = await handle.query<StreamInt>(querystmt, opt);
         for(let row of result.rows) {
            console.log('  %O', row);
         }
         opt.continuationKey = result.continuationKey;
      } while(opt.continuationKey);
   } catch(error) {
      console.error('  Error: ' + error.message);
   }
}
const orderby_stmt = `SELECT bag.fullName, bag.bagInfo[].tagNum,bag.bagInfo[].lastSeenTimeGmt FROM BaggageInfo bag
                      WHERE bag.bagInfo[].lastSeenStation=any \"MEL\" ORDER BY bag.bagInfo[].lastSeenTimeGmt DESC`
console.log("Using ORDER BY to sort data");
await fetchData(handle,orderby_stmt);

const sortlimit_stmt = `SELECT $bag.fullName, $bag.bagInfo.tagNum, $flt_time FROM BaggageInfo $bag,
                        $bag.bagInfo[].lastSeenTimeGmt $flt_time
                        WHERE $bag.bagInfo[].lastSeenStation=any "JTR"
                        ORDER BY $flt_time LIMIT 4`
console.log("Using ORDER BY and LIMIT to sort and limit data");
await fetchData(handle,sortlimit_stmt);

const groupsortlimit_stmt = `SELECT $flt_src as SOURCE, count(*) as COUNT FROM BaggageInfo $bag,
                             $bag.bagInfo.flightLegs[0].fltRouteSrc $flt_src GROUP BY $flt_src`
console.log("Using GROUP BY, ORDER BY and LIMIT to group, sort and limit data");
await fetchData(handle,groupsortlimit_stmt);

질의를 실행하려면 QueryAsync 메소드를 호출하거나 GetQueryAsyncEnumerable 메소드를 호출하고 결과 비동기 열거 가능을 반복할 수 있습니다.

GroupSortData.cs 예제에서 전체 코드 를 다운로드하십시오.
private static async Task fetchData(NoSQLClient client,String querystmt){
   var queryEnumerable = client.GetQueryAsyncEnumerable(querystmt);
   await DoQuery(queryEnumerable);
}

private static async Task DoQuery(IAsyncEnumerable<QueryResult<RecordValue>> queryEnumerable){
   Console.WriteLine("  Query results:");
   await foreach (var result in queryEnumerable) {
      foreach (var row in result.Rows)
      {
         Console.WriteLine();
         Console.WriteLine(row.ToJsonString());
      }
   }
} 
private const string orderby_stmt =@"SELECT bag.fullName, bag.bagInfo[].tagNum,bag.bagInfo[].lastSeenTimeGmt 
                                             FROM BaggageInfo bag WHERE bag.bagInfo[].lastSeenStation=any ""MEL"" 
                                             ORDER BY bag.bagInfo[].lastSeenTimeGmt DESC";
Console.WriteLine("\nUsing ORDER BY to sort data!");
await fetchData(client,orderby_stmt);

private const string sortlimit_stmt =@"SELECT $bag.fullName, $bag.bagInfo.tagNum, $flt_time FROM BaggageInfo $bag,
                                             $bag.bagInfo[].lastSeenTimeGmt $flt_time
                                             WHERE $bag.bagInfo[].lastSeenStation=any ""JTR""
                                             ORDER BY $flt_time LIMIT 4";
Console.WriteLine("\nUsing ORDER BY and LIMIT to sort and limit data!");
await fetchData(client,sortlimit_stmt);


private const string groupsortlimit_stmt =@"SELECT $flt_src as SOURCE, count(*) as COUNT FROM BaggageInfo $bag,
                                                  $bag.bagInfo.flightLegs[0].fltRouteSrc $flt_src GROUP BY $flt_src" ;
Console.WriteLine("\nUsing GROUP BY, ORDER BY and LIMIT to group, sort and limit data:");
await fetchData(client,groupsortlimit_stmt);