2017-08-29 59 views
-1

所以我有一个表的结构是这样的...MySQL的计数集团

SAMPLES 
| id | session | category | status | localfile | 

我试图让匹配localfiles名单包括:

与3档与状态所有会话=“完成“在类别”x“”y“和”z“中

我不想为任何没有所有3个类别的会话结果。

所以结果应该是这样的:

1, 100, x, complete, c:\... 
2, 100, y, complete, c:\... 
3, 100, z, complete, c:\... 
34, 106, x, complete, c:\... 
35, 106, y, complete, c:\... 
36, 106, z, complete, c:\... 

NOT:

1, 100, x, complete, c:\... 
2, 100, y, complete, c:\... 
34, 106, x, complete, c:\... 
35, 106, y, complete, c:\... 
36, 106, z, complete, c:\... 

它似乎并不像它应该是复杂的,但我不能换我的头周围。

回答

1

你需要找到哪些会话有

  • ('x','y','z')
  • 有状态= complete
  • ,并拥有所有3
  • DISTINCT是万一会话可以有反复类可选。

SELECT * 
FROM Samples 
WHERE session IN (SELECT session 
        FROM Samples 
        WHERE category IN ('x','y','z') 
        AND status = 'complete' 
        GROUP BY session 
        HAVING COUNT(DISTINCT category) = 3) 
    -- optional if there are other categories 
    AND category IN ('x','y','z') 
+0

非常感谢。我有类似的东西,但无法完成。 –

+1

我不认为有一种方法可以让你知道谁低估了这个问题。不值得花时间猜测或对此抱怨。 –