値範囲バケットを作成するには、レコードをバケット・サイズで除算し、必要に応じてFLOOR
またはCEIL
を使用して、最も近い整数に端数処理します。
/** * This groups results into buckets by amount, * rounded to the nearest 1000. */ RETURN Results AS SELECT ROUND(FactSales_SalesAmount, -3) AS Bucket, COUNT(1) AS CT FROM SaleState GROUP BY Bucket /** * This groups results into buckets by amount, * truncated to the next-lower 1000. */ RETURN Results AS SELECT FLOOR(FactSales_SalesAmount/1000)*1000 AS Bucket, COUNT(1) AS CT FROM SaleState GROUP BY Bucket
ROUND
にも同じ効果がありますが、バケットのセットは異なります:
FLOOR(900/1000) = 0
ROUND(900,-3) = 1000
DEFINE ValueRange AS SELECT COUNT(1) AS CT FROM SaleState GROUP BY SalesAmount HAVING SalesAmount > 1.0 AND SalesAmount < 10000.0; RETURN Buckets AS SELECT SUM(CT) AS CT, FLOOR((SalesAmount - 1)/999.0) AS Bucket FROM ValueRange GROUP BY Bucket ORDER BY Bucket