我需要编写一个sql查询,该查询将查找至少有2本不同书籍(book1,book2和book3)的用户。可以使用什么技术来编写这样的查询?
我想找到拥有指定图书集中至少2本图书的所有用户(' book_1',' book_2',#39; book_3')但是不要拥有第二组指定的任何书籍(' book_4')?
修改
OP无法解释他实际上在寻找什么。 OP实际上想要做的是:查找拥有至少2本不同图书的所有用户排除拥有名为' book_4'的图书的用户。
答案 0 :(得分: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中的示例。
答案 1 :(得分:2)
试试这个,
select USERS,count(distinct BOOKS) from myTable
where BOOKS in('Book1','Book2','Book3')
group by USERS
having count(distinct BOOKS) >=2