2012-01-05 55 views
2

我一直在追逐我的尾巴在這一個。我有一張桌子(這個例子很簡單)。試圖找到基於一組記錄,其中有一個100%的匹配mysql的單個記錄

LogID (Primary Key) 
UserID (Foreign Key) 
Skipped (Tiny Int, default 0) can be 1 or 0 

這是一個一對多的關係,這是表中「多」在此加入

用戶即:約翰史密斯可能有10用戶ID的每條記錄可以有一個跳過= 1或Skipped = 0,具體取決於特定記錄的實例。

下面是一個簡單的斷點數據

1 | 10 | 1 
2 | 10 | 0 
3 | 10 | 1 
4 | 10 | 0 

下來所以這個用戶是在那裏的4倍。 2記錄顯示跳過(1),2記錄顯示未跳過(0)。

我需要創建一個查詢來查找跳過100%的用戶。所以看起來像這樣的人:

1 | 11 | 1 
2 | 11 | 1 
3 | 11 | 1 
4 | 11 | 1 

如果被跳過是0我不希望那個用戶。用戶可以混合使用(跳過是和否),所以我需要找到僅100%跳過的用戶。我將需要它通過UserID分組或至少DISTINCT處理它發現時,所以我得到單個用戶(沒有dups)。我一直在關注GROUP BY,HAVINGS,COUNT和SUM以解決這個問題,但是我一直在抓住查詢的100%部分。

我使用MySQL 56年5月1日

任何建議都非常讚賞。

謝謝! 韓紙

回答

3
select userid 
from table 
group by userid 
having count(userid) = sum(if(skipped = 1,1,0)) 
+0

'總和(跳過)'就足夠了,不是嗎? – fge 2012-01-05 22:10:07

+1

是的,在這種情況下,跳過的可以只有一個布爾值,你是對的。 ;) – 2012-01-05 22:16:05

+0

偉大的解決方案。謝謝! – hanji 2012-01-05 22:21:48

0
select distinct userid 
from table 
where userid not in 
(select userid from table where skipped = 0) 
+1

我相信你會需要一個獨特的在那裏... OP說:「我將需要它分組UserID或至少DISTINCT處理它發現時,所以我得到單個用戶(沒有dups) 「。 – saritonin 2012-01-05 23:29:53

+0

已更改。起初這個要求並不存在 – 2012-01-06 07:40:33