2013-01-22 34 views
5

count_temp tableतालिका में जोड़ी मूल्यों से गिनती लेने

एक नमूना तालिका के एक आउटपुट के रूप में ऊपर ले, मैं एक एसक्यूएल क्वेरी जो परिणाम "2" मेज से गिनती के रूप में की जरूरत है।

मैंने 4 तक प्रेषित कॉलम के दौरान intially कोशिश की है, और ठीक था; लेकिन अधिक पंक्तियां गलत ओ/पी दिखाती हैं। मेरा पुराना कोड

SELECT COUNT(*)/2 
    FROM 
    (SELECT sentby,sentto 
    FROM 
      (SELECT DISTINCT sentby, sentto FROM count_temp) 
    WHERE sentto IN 
      (SELECT DISTINCT sentby FROM count_temp) 
     AND sentby IN 
      (SELECT DISTINCT sentto FROM count_temp) 
    ) ; 

अग्रिम धन्यवाद :) और सराहना की गई।

उत्तर

1

आपकी क्वेरी:

with cte as (
select distinct m1.sentby , m1.sentto 
from m m1 
inner join m m2 
    on m1.sentby = m2.sentto and 
     m2.sentby = m1.sentto 
) 
select count(*)/2 from cte; 

test it at sqlfiddle

इसके अलावा, सरल बनाने:

select count(distinct m1.sentby)/2 
from m m1 
inner join m m2 
    on m1.sentby = m2.sentto and 
     m2.sentby = m1.sentto 
1

प्रयास करें यह एक:

SELECT count(*)/2 
    FROM 
     (SELECT sentby, 
       sentto, 
       max(rownum) AS rn 
     FROM count_temp 
     GROUP BY sentby, 
       sentto) a, 
     (SELECT sentby, 
       sentto, 
       max(rownum) AS rn 
     FROM count_temp 
     GROUP BY sentby, 
       sentto) b 
    WHERE a.rn != b.rn 
     AND a.sentby = b.sentto 
     AND a.sentto = b.sentby;