【发布时间】:2019-12-07 23:49:28
【问题描述】:
所以,我试图向所有作家展示大多数书籍都是使用 have 编写的,我尝试了这个:
select *
from writer as a,(
SELECT writer_id,count(writer_id) as posts
FROM blog
GROUP BY writer_id
) as b WHERE a.id = b.writer_id
GROUP BY writer_id
HAVING posts>=max(posts);
但是当我执行它时,它会返回整个表格,而不仅仅是那些书籍最多的表格。为什么不在这里工作?我想我错过了一些东西。如果我将 max(posts) 替换为示例表中的实际最大帖子数,则它可以工作。
我正在使用这个问题的示例表:Question
【问题讨论】:
-
旁注:(1) 您不应再使用逗号分隔的连接。它们已在 1992 年的标准 SQL 中变得多余。(2)如果要计算记录,请使用
COUNT(*)。COUNT(<expression>)用于计算非空出现次数。使用count(writer_id),看起来writer_id可能为空,而您希望从计数中省略这些行。 -
您查询的问题是:对于每个作者,您加入了他们的博客数量。然后你按作家分组,这实际上没有任何作用,因为每个作家已经有一行。然后,您将作者的博客数与作者的最大博客数进行比较。您正在取一个数字的最大值,这只是数字本身。对于有十篇博客的作者,您说:如果 10 = 10,则返回这一行。对于有五个博客的作者,您说:如果 5 = 5,则返回这一行。您将返回所有行。
标签: sql database sqlite group-by