2014-05-21 89 views
-3

我需要編寫一個sql查詢,查找擁有至少2套不同書籍(book1,book2和book3)的用戶。什麼技術可以用來編寫這樣的查詢?編寫一個SQL查詢搜索

我想查找所有擁有至少兩本書的所有用戶,這些用戶至少擁有指定帳套('book_1','book_2','book_3')中的兩本書,但不擁有第二個指定集中的任何書籍(' book_4' )?

Example

編輯:

OP不能說明什麼,他實際上是在尋找。 OP實際上試圖做的是:

查找擁有至少2本不同書籍的所有用戶,並且排除那些擁有「book_4」書籍的用戶。

+1

分組由&與不同 – AK47

+0

你能看到圖片嗎? – noors

+0

是的。你能看到答案嗎? – AK47

回答

4

試試這個:

SELECT Users,Count(DISTINCT Books) as CountOfBooks 
FROM TableName 
GROUP BY Users 
HAVING COUNT(DISTINCT Books) >= 2 

說明:

在這裏,我們分組與用戶字段的表內容和計算的不同圖書的數量每個用戶都有。 HAVING子句有助於用不同書的計數來過濾結果。

您可以根據需要更改數字2。而=可用於精確匹配而不是至少。

查看SQL Fiddle中的示例。

編輯:

爲了排除用戶book_4,試試這個:

SELECT Users,Count(DISTINCT Books) as CountOfBooks 
FROM TableName 
WHERE Users NOT IN (SELECT Users FROM TableName WHERE Books = 'book_4') 
GROUP BY Users 
HAVING COUNT(DISTINCT Books) >= 2 

一個更快的版本(不使用IN):

SELECT T1.Users,Count(DISTINCT T1.Books) as CountOfBooks 
FROM TableName T1 LEFT JOIN 
(SELECT Users 
FROM TableName 
WHERE Books = 'Book4') T2 ON T2.Users=T1.Users 
WHERE T2.Users IS NULL 
GROUP BY T1.Users 
HAVING COUNT(DISTINCT T1.Books)>=2 

中的一個例子SQL Fiddle

+0

count = 2應該更改,用戶至少要求2. – AK47

+1

+ 1用於演示和說明。 – AK47

+3

你不應該對這類問題給出明確的答案,他應該盡力解決這個問題。 – user2705620

2

試試這個,

select USERS,count(distinct BOOKS) from myTable 
where BOOKS in('Book1','Book2','Book3') 
group by USERS 
having count(distinct BOOKS) >=2 
+0

Upvoted as the code does not what what's question asked –

+0

對不起,但您的查詢爲用戶1,2和4提供了幫助。但user4不應該是 – noors

+0

抱歉user_1不應該是因爲他擁有所有4本不同的書籍(根據需要不是1,2或3) – noors