从表中的对值中获取计数

时间:2013-01-22 08:13:10

标签: sql oracle oracle11g

count_temp table

将上面作为样本表的输出, 我需要一个sql查询,结果“2”作为表中的计数。

我已经尝试了最多4次发送列,并且没事; 但是更多的行显示不正确的o / p。我的旧代码是

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 )
     ) ;

提前致谢:)并赞赏。

2 个答案:

答案 0 :(得分: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 :(得分: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;