1

私はテーブルを持っています

GLId        Id          DonarId
----------- ----------- -----------
1           1           1
2           1           2
3           2          1
4           2          2
5           3          1
6           3          2
7           4          1
8           4          2
9           5          1
10          5          2

ここで、donarId 列に存在せず、count(donarid) が 8 未満の ID を見つけたいと考えています。

クエリを書きました

SELECT g.id 
FROM   gamestar g 
       LEFT JOIN gamestar gs 
              ON g.id = gs.donarid 
GROUP  BY g.id, 
          g.glid 
HAVING Count(gs.donarid) < 8 
ORDER  BY g.glid 

しかし、それは重複した値をもたらします。

結果は次のようになります

ID
-----------
1
1
2
2
3
3
4
4

等々。

親切な助けを待っています。ありがとう

4

4 に答える 4

0
;WITH cte AS
 (
  SELECT g.glid, g.id,
         COUNT(1) OVER (PARTITION BY gs.donarid, g.glid) AS cn 
  FROM gamestar g LEFT JOIN gamestar gs ON g.id = gs.donarid
  )
  SELECT Id
  FROM cte
  WHERE cn < 8
  GROUP BY Id
于 2012-12-12T00:26:57.853 に答える
0

donar id 列に表示される回数が 8 回未満の ID を探しているようです。

select g.id
from gamestar g
where g.donarid not in (select donarid from gamestar)
group by g.id
having count(*) < 8
于 2012-12-11T19:01:35.407 に答える
0

使用できますDISTINCT

SELECT DISTINCT g.id 
FROM   gamestar g 
       LEFT JOIN gamestar gs 
              ON g.id = gs.donarid 
GROUP  BY g.id, 
          g.glid 
HAVING Count(gs.donarid) < 8 
ORDER  BY g.glid 
于 2012-12-11T18:59:50.737 に答える
0

これを試して

 SELECT g.id 
 FROM   gamestar g 
    LEFT JOIN gamestar gs 
          ON g.id = gs.donarid 
 GROUP  BY g.id 
 HAVING Count(gs.donarid) < 8 

SQLフィドル

于 2012-12-11T19:24:15.847 に答える