1

次のような 2 つの値を関連付ける単純な SQL テーブルがあります。

table1(column1 varchar (32), column2 varchar(32));

列 1 の個別の値ごとに、値のリストから、このテーブルで最も多く発生する値を見つけたいと考えています。

明確にする例:

次の値があるとします。

a1, b1
a2, b2
a3, b3
a4, b1
a3, b1
a3, b2
a5, b1
a6, b2

私が望む結果は次のとおりです。

a1, b1
a2, b2
a3, b1
a4, b1
a5, b1
a6, b2

b1b2がテーブル内で最も多く出現するためです。

4

1 に答える 1

3

これは、ウィンドウ関数の優れたアプリケーションです。それにアプローチする方法は複数あります。ここに1つの方法があります。column2各行の頻度を取得します。次に、 を使用してこれらすべての周波数をランク付けしますrow_number()

select column1, column2
from (select t.*,
             row_number() over (partition by column1 order by col2cnt desc) as seqnum
      from (select t.*, count(*) over (partition by column2) as col2cnt
            from t 
           ) t
     ) t
where seqnum = 1

最後のステップ (最も外側のクエリによって行われる) は、ランクが最も高い (つまり、カウントが最も高い) ものを選択することです。

同点の場合 (つまり、 とb2同じ頻度で出現する場合b1)、このバージョンでは任意の値が選択されます。

于 2013-06-16T17:34:57.587 に答える