如何在列表中找到作者,其中包含谁在mysql中编写了大多数书籍

问题描述 投票:-1回答:3

我有两个表作家和博客。 Writer表有id和name列。博客表有id,blog和writer_id。我必须找到写更多博客的作家。

mysql sql
3个回答
0
投票

我已根据您的简要描述创建了一个示例模式,并根据该模式提供了答案。

create table writer(id int,name text);
create table blog(id int,writer_id int,blog text);

insert into writer values
  (1,'Writer A'), (2,'Writer B'), (3,'Writer C'), (4,'Writer D'),
  (5,'Writer E'), (6,'Writer F'), (7,'Writer G');

insert into blog values
  (1,1,'Blog 1'), (2,1,'Blog 2'), (3,3,'Blog 3'), (4,3,'Blog 4'),
  (5,2,'Blog 5'), (6,3,'Blog 6'), (7,3,'Blog 7'), (8,6,'Blog 8'),
  (9,4,'Blog 9');

select w.name,count(b.id) 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;

通过更改limit部分,您可以从顶部1更改为顶部2或3等。


0
投票

你应该试试这个代码。我希望这是有帮助的

select 
   a.name, Max(b.highest)
from writer as a
left join(
  select 
     count(*)as highest,
     writer_id 
  from blog
  GROUP BY writer_id
) as b on a.id = b.writer_id

0
投票

可能有几个作家写了相同数量的书。所以我们需要一个允许联系的限制条款。

标准SQL查询:

select *
from writer
where id in
(
  select writer_id
  from blog
  group by writer_id
  order by count(*) desc
  fetch first rows with ties
);

但是MySQL的LIMIT不允许绑定。人们可以通过他们的书数对作者进行排名来达到同样的目的。但是,MySQL不具备RANK等排名功能。

因此,对于MySQL,您不得不寻找另一种方法:

  1. 每位作者统计书籍
  2. 确定这些的最大数量
  3. 选择作者和他们的书再次计算
  4. 只保留图书数与最大图书数相符的作者
  5. 选择作者的名字

MySQL查询:

select *
from writer
where id in
(
  select writer_id
  from blog
  group by writer_id
  having count(*) =
  (
    select count(*)
    from blog
    group by writer_id
    order by count(*) desc
    limit 1
  )
);
© www.soinside.com 2019 - 2024. All rights reserved.