我正在准备我的数据库系统考试(明天),但在要求我编写查询的练习中遇到了麻烦。这是一个例子:
我被要求写一个查询来回答以下问题:在年龄最小的作者中,谁写的书最多?
问题是我的老师禁止我在 FROM 子句中使用子查询,并使用 TOP。
我已经写了一个答案,但我知道一个答案是不正确的:
SELECT W.AName, COUNT(W.ID_B) AS NBooks
FROM Write W, Author A1
WHERE (A1.AName = W.AName) AND
(A1.AAge = (SELECT MIN(A2.Age)
FROM Author A2))
GROUP BY W.AName
ORDER BY NBooks DESC
这个给出了所有年龄较小的作者,以及他们各自写的书数量(我希望..)。正确答案应该只是这一行的第一行。
让我说清楚:
Table Author
AName | AAge
---------------
John | 25
Rick | 30
Sean | 26
Lena | 25
Table Writes
AName | ID_B
---------------
John | 2
Lena | 1
John | 3
Lena | 4
Rick | 5
Rick | 6
Lena | 6
Rick | 7
Rick | 8
(注意 Sean 没有写任何书,第 6 本书有 2 个作者,而 Rick 是拥有最多书籍的作者 (4) )
现在,我上面写的代码给出了这个结果(我猜):
AName | NBooks
-----------------
Lena | 3
John | 2
(最低年龄是 25 岁,莉娜和约翰都是 25 岁)
问的是:
AName | NBooks
-----------------
Lena | 3
(Lena 是作者,在所有年龄最小的作者中(25 岁),着书最多)
提前致谢