2017-07-03 60 views
3

我有书的表,它包含以下几列:计数和非SQL查询

Book_Id User_Id 
001  1 
002  2 
001  1 
004  2 
005  3 
006  3 
007  2 
008  2 
009  1 

其中

Book_Id - 一本书,用户阅读的标识; User_Id - 读者/用户的标识符 。

我们假设User1读三次书,但其中两个是相同的,所以用户1读两本不同的书(001和009)。用户2阅读4本不同的书籍,而用户3阅读2本不同的书籍。总的来说,有2个用户阅读2本不同的书籍,1个用户阅读4本不同的书籍。 预期的输出结果如下:

Distinct_Books_Count --- User_Count 
2       2 
4       1 

我试过如下:

SELECT COUNT(DISTINCT Book_Id),COUNT(USER_ID)从书本GROUP BY USER_ID

但我收到下表:

Distinct_Books_Count User_Count 
2      3 
4      4 
2      2 

因此,任何替代解决方案或更改?

回答

2

我称之为“直方图直方图”查询。你可以使用两个group by s:

SELECT num_books, COUNT(*) 
FROM (SELECT b.User_Id, COUNT(DISTINCT Book_Id) as num_books 
     FROM Books b 
     GROUP BY User_Id 
    ) b 
GROUP BY num_books 
ORDER BY num_books;