0

SQL データベースに次のテーブル構造があるとします。

Att1   |   Att2   |   Att3   |  Cnt

特定の Att1 のすべての Att2 の組み合わせに対する Att3 の重複を理解したいと思います。たとえば、次のテーブルがあるとします。

123   |   456    |   abc    |  1
123   |   456    |   efg    |  1
123   |   456    |   hij    |  1
123   |   456    |   klm    |  1
123   |   456    |   nop    |  1
123   |   789    |   efg    |  1
123   |   789    |   abc    |  1
123   |   789    |   xyz    |  1
123   |   789    |   nop    |  1
345   |   456    |   abc    |  1
345   |   456    |   efg    |  1
345   |   789    |   abc    |  1
345   |   999    |   efg    |  1

次の出力を生成します。

123   |   456    |   456    |  1.0
123   |   456    |   789    |  .6
123   |   789    |   456    |  .75
123   |   789    |   789    |  1.0
345   |   456    |   456    |  1.0
345   |   456    |   789    |  .5
345   |   456    |   999    |  .5
345   |   789    |   456    |  1.0
345   |   789    |   789    |  1.0 
345   |   789    |   999    |  0
345   |   999    |   456    |  1.0
345   |   999    |   789    |  0  
345   |   999    |   999    |  1.0

これは SQL を使用して行うのが最善ではないことを理解しています。そのため、他の代替案を聞いてうれしく思いますが、SQL は現在利用可能なデータがある場所です。

4

1 に答える 1

6

これは、集計を使用したいくつかの簡単なトリックを使用して行うことができます。

SELECT t1.att1, t1.att2, t2.att2 as att2_other, 
       SUM(CASE WHEN t2.att3 = t1.att3 THEN 1.0 ELSE 0 END)/COUNT(DISTINCT t1.att3) as Cnt
FROM table_name t1
JOIN table_name t2
  ON t1.att1 = t2.att1
GROUP BY t1.att1, t1.att2, t2.att2

ここでsqlfiddleを作業する

于 2013-01-08T20:40:21.207 に答える