2013-06-11 113 views
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?

你願意用另一個連接來添加描述性列嗎?

+0

爲什麼您的查詢使用Netezza和SQLServer標記?你在用哪個?另外,你是否認識到'count(*)'是一個集合函數? –

+0

馬克你不覺得這個問題可以適用於兩個社區嗎? – martez

回答

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 

在SQL Server中使用order by (select NULL)。我不確定它是否可以在Netezza中使用。任何表達式都適用於該命令。

+0

這種方法的問題是,如果一個描述性列(t.x,t.y,t.z,..)與同一組的其他列不同,它將導致一個新組。在這種情況下,下面的示例將導致兩個組而不是一個.. 'a | b | c | x | y | z | ... 1 1 1 p r s 1 1 1 p r s 1 1 1 p r sa' – martez

+0

@martez。 。 。如果是這樣的話,那麼這個問題中的陳述就不會是真的:「每個組的列x,y和z是相同的。」 –

+0

你說得對。但是,如果x,y,z發生錯誤,則會添加新的組/項目,這是不正確的。如果group by會在列a,b,c上定義,則不會發生此行爲。 – martez