0

key私はクエリ(実際にはビュー)を持っていますが、通常は からへの一意のマッピングを定義する必要がありますvalue2

select key, value1, value2
from tbl -- joins are left out here
where (1=1) -- left out here
order by key
;

通常、結果は次のようになります

key       value1  value2
--------------------------
Harry     fish    blue
Sally     dog     green
Willy     dog     red

一意keyにマッピングできます。value2

しかし、たまたま、基礎となるデータにジャンクが含まれている可能性があります。

key       value1  value2
--------------------------
Harry     fish    blue
Harry     fish    black     -- <<< breaks uniqueness
Sally     dog     green
Willy     dog     red

HAVINGand/orGROUP BY式を追加して、修道女固有の行を簡単に識別したいと思います。この場合、何かをしなければならないのでvalue2、どうにかしてそれを集約しなければなりません - 私の考えはmax.

したがって、結果の例は次のようになります。

key       value1  value2   count_value2
----------------------------------------
Harry     fish    blue     2
Sally     dog     green    1
Willy     dog     red      1

しかし、いつものように、私はGROUP BYとその配偶者に完全に困惑しています。それ以外はどこに行けばいいですか?集計の場所と場所は?

4

3 に答える 3

1

このようなもの?

select 
  key, 
  min(value1) as "a value1", 
  min(value2) as "a value2", 
  max(value2) as "another value2", 
  count(distinct value2) "number of value2"
FROM tbl
group by key
having count(distinct value2) > 1
于 2012-06-21T10:23:10.320 に答える
1

解決に近づく:

select tbl.*,count(distinct value2) over (partition by key) from tbl

またはグループで

select key,count(distinct value2) from tbl group by key having count(distinct value2)>1
于 2012-06-21T10:23:39.817 に答える
0

これを試してみて、これがあなたが探しているものであることを私に知らせてください

select C.key,C.value1,C.value2,A.count_value2 from
(select key,value1,COUNT(*) count_value2
from tbl
group by key,value1)A
join
(select B.key,B.value1,B.value2 from
(select *,ROW_NUMBER() over(partition by T.key,T.value1 order by T.key )  rn 
from tbl T 
group by T.key,T.value1,T.value2)B
where B.rn=1)C
on C.key=A.key
and C.value1=A.value1
于 2012-06-21T11:50:33.460 に答える