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;

是否有任何其他函数可用于在 select 语句中包含列 x、y 和 z?

您是否愿意使用另一个联接来添加描述性列?

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 回答