具有+ Max功能无法正常工作

时间:2019-12-07 23:49:28

标签: sql database sqlite group-by

所以,我试图向所有作家展示大多数使用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

2 个答案:

答案 0 :(得分:1)

要使作家拥有最多的书籍,只需order bylimit

select w.name, count(*) no_of_books
from writer w 
join blog b on w.id = b.writer_id
group by w.id
order by no_of_books desc
limit 1

如果存在最重要的联系(即,几位作家的书籍最多),而您想全部收录,则解决方案是使用having子句进行过滤:

select w.name, count(*) no_of_books
from writer w 
join blog b on w.id = b.writer_id
group by w.id
having count(*) = (
    select count(*) from blog group by writer_id order by count(*) desc limit 1
)
order by w.name

答案 1 :(得分:0)

您可以使用rank()窗口功能来做到这一点:

select w.*, t.counter 
from writer w inner join (
  select writer_id, count(*) counter,
    rank() over (order by count(*) desc) rn
  from blog
  group by writer_id      
) t on t.writer_id = w.id
where t.rn = 1

如果存在,此代码还会返回联系。
请参见demo
结果:

| id  | name     | counter |
| --- | -------- | ------- |
| 3   | Writer C | 4       |