これまでのところ、SUM、AVGおよびその他の集計関数に基づいて値を検索するために、集計関数の後にグループ化句を記述しました。グループ化句では少し混乱しています。集計を使用する場合関数は、Group By句で指定する必要のある列とは何ですか。それ以外の場合、Group By句を使用せずに集計関数を使用する方法はありますか。
集計を持たないSELECT句のすべての列はGROUP BYにある必要があります
良い:
SELECT col1, col2, col3, MAX(col4)
...
GROUP BY col1, col2, col3
また良い:
SELECT col1, col2, col3, MAX(col4)
...
GROUP BY col1, col2, col3, col5, col6
他の列は不要= GROUP BYは不要
SELECT MAX(col4)
...
動作しません:
SELECT col1, col2, col3, MAX(col4)
...
GROUP BY col1, col2
無意味:
SELECT col1, col2, col3, MAX(col4)
...
GROUP BY col1, col2, col3, MAX(col4)
クエリが曖昧になるため、GROUP BYを使用せずに他の列を含む集計(MAXなど)を使用しても意味がありません。
TSQLでSelect AGG()OVER()を使用できます
SELECT *,
SUM(Value) OVER()
FROM Table
グループ化する場合は、Partition Byなどの他のオプションがあります。
SELECT *,
SUM(Value) OVER(PARTITION By ParentId)
FROM Table
はい、GROUP BYなしで集計を使用できます。
SELECT SUM(col) FROM tbl;
これは、1行のみを返します-tblのすべての行(nullを除く)の列「col」の合計。
notを実行する列でグループ化する必要があります。
all選択された列に集計関数が適用されている場合、group by句を回避できます。
Aggregate関数に存在しない列は、group by句に含める必要があります。
Select
Min(col1),
Avg(col2),
sum(col3)
from table
次に、group by句は必要ありませんが、Aggregate関数に存在しない列がある場合は、その列にgroup byを使用する必要があります。
Select
col1,
col2,
sum(col3)
from table
group by col1,col2
次に、列col1とcol2にgroup byを使用する必要があります。
集計関数内のSELECTから列を省略します。他のすべての列は、カンマで区切られたGROUP BY句に存在する必要があります。
SELECTステートメントに集計値のみが含まれている限り、集計を使用してクエリを作成でき、グループ化はできません。