2013-06-30 101 views
1

當涉及到編寫涉及聚合函數(如Count和使用Having)的查詢時,我遇到了麻煩。我有兩張人名(id和name)和書籍(bookid,author_id,title)(這裏的author_id是People id的外鍵)。 我目前有一個查詢,返回給我所有寫過書的人(不是所有的人都寫了一本書)。sql使用count與group by和

SELECT People.name, 
     Books.title 
FROM People, 
    Books 
WHERE Books.author_id = People.id; 

現在我試圖找到只有誰寫了200多本書,並把它選擇相同的信息(people.name和books.title)的人,但我很困惑,我怎麼會去這個。我一直在嘗試使用HAVING count(People.name)> 1,但我得到的選擇絕對不正確。

新的使用sql的排序,特別是當涉及到這些額外的參數在我的查詢,只是想知道如果有人可以幫我。我沒有真正看到這些條件下的任何查詢的例子。

回答

3

這是更好地加入你的表是這樣的:

SELECT People.name, Books.title 
FROM People INNER JOIN Books ON Books.author_id = People.id; 

,你可以添加你HAVING子句,因爲這:

SELECT Books.author_id 
FROM Books 
GROUP BY Books.author_id 
HAVING COUNT(*)>=2 

然後選擇你需要,你可以用這個的所有信息:

SELECT People.name, Books.title 
FROM People INNER JOIN Books ON Books.author_id = People.id 
WHERE People.ID IN (
    SELECT Books.author_id 
    FROM Books 
    GROUP BY Books.author_id 
    HAVING COUNT(*)>=2 
) 
2
SELECT People.name, 
     Books.title 
FROM People, 
    Books 
WHERE Books.author_id = People.id 
    and exists (select 1 
       from (
       SELECT People.name name 
       FROM People, 
         Books 
       WHERE Books.author_id = People.id 
       group by Pepole.name 
       having count(People.name)>1 
      ) temp 
       where temp.name = People.name)