2016-07-11 2 views
0

Supposons une table t de la manière suivante:SQL pour comparer les deux valeurs différentes de la colonne de groupe distinct dans une table

 
    c1 c2 
    == == 
    a 1 
    a 2 
    b 1 
    b 2 
    b 3 
    c 4 
    c 2 

Nous groupe cette table par c1 et a trois groupes a, b, c. Je besoin de calculer la similarité de la colonne c2 entre deux groupes, comme les suivants:

 

    sim(a,b) = 2(common value of c2 are 1 and 2)/3(all value)=2/3 
    sim(b,c) = 1(b and c has only one value 2 in common)/4 = 1/4 
    sim(a,c) = 1/3 

Peut-on utiliser SQL (syntaxe Oracle 11g d'abord) pour construire l'expression ci-dessus?

+0

Tag votre question avec la base de données que vous utilisez. –

Répondre

0

Je crois que cette requête fait ce que vous voulez:

select t1.c1, t2.c1, count(*) as NumInCommon, 
     (select count(distinct t.c2) 
     from t 
     where t.c1 in (t1.c1, t2.c1) 
     ) as NumInTotal 
from t t1 join 
    t t2 
    on t1.c2 = t2.c2 
group by t1.c1, t2.c1 
+0

Cette exécution sql en oracle montrera, grouper par la syntaxe mal! –