0

グループは、列 a、b、および c によって定義されます。各グループの列 x、y、z は同じです。サンプル:

a|b|c|x|y|z| ....
1 1 1 p r s 
1 1 1 p r s 
1 1 1 p r s 
2 1 2 t u v
2 1 2 t u v

ただし、集計関数 (max(tx), ...) を使用せずに次のことを達成しようとしています。

select  t.a, t.b, t.c,count(*), t.x, t.y, t.z, ....
from t
group by t.a, t.b, t.c;

列 x、y、z を含めるために select ステートメントで使用できる他の関数はありますか?

別の結合を使用して説明列を追加しますか?

4

1 に答える 1

0

列がグループ内で同じである場合は、それらをgroup by句に含めます。

select  t.a, t.b, t.c,count(*), t.x, t.y, t.z, ....
from t
group by t.a, t.b, t.c, t.x, t.y, t.z

カウントのあるランダムな行が必要な場合は、ウィンドウ関数を使用します。

select t.*
from (select t.*,
             count(*) over (partition by a, b, c) as cnt,
             row_number() over (partition by a, b, c order by (select NULL)) as seqnum
      from t
     ) t
where seqnum = 1

order by (select NULL)SQL Server で使用されます。Netezza で動作するかどうかはわかりません。order by には任意の式が使用できます。

于 2013-06-11T14:39:35.963 に答える