5

count_temp テーブル

サンプルテーブルの出力として上記を取得します。テーブルからのカウントとして「2」という結果になるSQLクエリが必要です。

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

前もって感謝します:)そして感謝します。

4

2 に答える 2

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;

sqlfiddleでテストします

また、単純化:

select count( distinct m1.sentby ) / 2
from m m1 
inner join m m2
   on m1.sentby = m2.sentto and
      m2.sentby = m1.sentto 
于 2013-01-22T08:17:54.983 に答える
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;  
于 2013-01-22T08:36:19.147 に答える