データ集計関数と組み合わせた高度なSELECTステートメント
- 24-07-2022
- Toanngo92
- 0 Comments
Mục lục
データ集計関数
開発者は、行のカウント、特定の基準の達成、すべての注文の売上の要約など、行の分析を実行するように依頼する場合もあります。集計関数を使用すると、それを実行できます。
集計関数は単一の値を返すため、SELECT、HAVING、ORDER BY句など、式が使用されるSELECT状態で使用できます。集計関数は、COUNT(*)を使用する場合を除いて、NULLを無視します。
SELECTリストの集計関数には列名がありません。AS句を使用して列名を設定することをお勧めします。
集計関数は、SELECTフェーズに渡されたすべての行を操作するSELECT句です。 GROUP BY句がない場合、すべての行が要約されます。
いくつかの集計関数:
関数名 | 構文_ | 説明 |
AVG | AVG(<式>) | 列内のすべてのNULL以外の値の平均を計算します |
COUNTまたはCOUNT_BIG | COUNT(*)またはCOUNT(<式>) | (*)を使用すると、この関数はNULLを含むすべての行をカウントします。この関数は、NULLを含むすべての行をカウントします。この関数は、列が。として指定されている場合、その列のNULL以外の行の数を返します。 COUNT関数の戻り値はintです。 COUNT_BIGの戻り値はbig_intです。 |
MAX | MAX(<式>) | 最大数、最新の日付/時刻、または最新の出現文字列を返します。 |
MIN | MIN(<式>) | 最小の数値、最も遠い日付または時刻、または最初に出現する文字列を返します |
まとめ | SUM(<式>) | 列内のすべてのNULL以外の値を合計します。 |
例えば:
SELECT AVG([UnitPrice]) AS AvgUnitPrice, MIN([OrderQty]) AS MinQty, MAX([UnitPriceDiscount]) AS MaxDiscount FROM Sales.SalesOrderDetail;
SELECT句で集計を使用する場合、SELECTリスト内のすべての個別の列を集計関数への入力として使用するか、GROUPBY句で参照する必要があります。失敗するとエラーになります。
エラーを返すクエリの例:
SELECT SalesOrderID,AVG(UnitPrice) AS AvgPrice FROM Sales.SalesOrderDetail;
返されたエラー:
Column 'Sales.SalesOrderDetail.SalesOrderID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
これを修正するには、SELECTステートメントのSalesOrderID列を削除するだけです。
数値データで集計関数を使用する以外に、日付、時刻、文字データで使用できます。
MINとCODEを使用して最も近い注文日と最も遠い注文日を取得する例
SELECT MIN(OrderDate) AS Earliest, MAX(OrderDate) AS Lastest FROM Sales.SalesOrderHeader
空間合成
SQL Serverは、2つの個別の幾何学的または地理的データ項目を集約するためのいくつかの方法を提供します。
方法 | 説明 |
STUnion | あるジオメトリ/地理フィーチャと別のジオメトリ/地理フィーチャの結合を表すオブジェクトを返します。 |
STIntersection | 1つのジオメトリ/地理的特徴と別のジオメトリ/地理的特徴の交差を表すオブジェクトを返します |
STConvexHull | 幾何学的/地理的特徴の凸部分を表すオブジェクトを返します。任意の2つのポイントについて、セグメント全体がそのセットに含まれている場合、ポイントのセットは凸であると言われます。点のセットの凸包は、そのセットを含む最小の凸集合です。任意の点のセットに対して、凸状のシェルは1つだけです。 |
例えば:
SELECT geometry::Point(251,1,4326).STUnion(geometry::Point(252,2,4236));
例2:
DECLARE @City1 geography SET @City1=geography::STPolyFromText('POLYGON((175.3 -41.5,183.3 -37.9,172.8 -34.6,175.3 -41.5))',4326) DECLARE @City2 geography SET @City2=geography::STPolyFromText('POLYGON((169.3 -46.6,174.3 -41.6,172.5 -40.7,166.3 -45.8,169.3 -46.6))',4326) DECLARE @CombinedCity geography=@City1.STUnion(@city2) SELECT @CombinedCity
一部の空間集計関数
ユニオンアグリゲート
一連のジオメトリックオブジェクトに対してマージ操作を実行します。複数の空間オブジェクトを1つの空間オブジェクトに結合し、内部境界がある場合はそれを削除します。
例えば:
SELECT Geography::UnionAggregate (SpatialLocation) AS AVGLocation FROM Person.Address WHERE City='London';
封筒骨材
例えば:
SELECT Geography::EnvelopeAggregate(SpatialLocation) AS Location FROM Person.Address WHERE City='London'
凸包骨材
例えば:
SELECT Geography::ConvexHullAggregate(SpatialLocation) AS Location FROM Person.Address WHERE City='Lodon'