web-dev-qa-db-ja.com

Group By句を使用せずに、SelectステートメントでAggregate関数を使用することはできますか?

これまでのところ、SUM、AVGおよびその他の集計関数に基づいて値を検索するために、集計関数の後にグループ化句を記述しました。グループ化句では少し混乱しています。集計を使用する場合関数は、Group By句で指定する必要のある列とは何ですか。それ以外の場合、Group By句を使用せずに集計関数を使用する方法はありますか。

17
thevan

集計を持たない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など)を使用しても意味がありません。

30
gbn

TSQLでSelect AGG()OVER()を使用できます

SELECT *,
SUM(Value) OVER()
FROM Table

グループ化する場合は、Partition Byなどの他のオプションがあります。

SELECT *,
SUM(Value) OVER(PARTITION By ParentId)
FROM Table

http://msdn.Microsoft.com/en-us/library/ms189461.aspx

23
Anthony Sottile

はい、GROUP BYなしで集計を使用できます。

SELECT SUM(col) FROM tbl;

これは、1行のみを返します-tblのすべての行(nullを除く)の列「col」の合計。

6
nvogel

notを実行する列でグループ化する必要があります。

all選択された列に集計関数が適用されている場合、group by句を回避できます。

2
Bohemian

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を使用する必要があります。

1
Bhawesh Deepak

集計関数内のSELECTから列を省略します。他のすべての列は、カンマで区切られたGROUP BY句に存在する必要があります。

SELECTステートメントに集計値のみが含まれている限り、集計を使用してクエリを作成でき、グループ化はできません。

1
niktrs