当前位置: 首页 > 知识库问答 >
问题:

这个MySQL quearly会选择所有写过书的作者吗?

柳羽
2023-03-14
SELECT a.AuthorName, COUNT(b.*) AS ‘number of books written’
FROM Author a JOIN Book b ON  a.AuthorID = b.BookID 
GROUP BY a.AuthorName;

这不是正确的我知道,但我不能弄明白??

共有1个答案

阎修明
2023-03-14

假设需求是统计至少有一本书的作者,满足这一要求的最简单的查询是:

SELECT COUNT(DISTINCT b.authorid)
  FROM book b

我们可能希望为返回的列分配一个别名(名称):

SELECT COUNT(DISTINCT b.authorid) AS `count_of_authors_who_have_at_least_one_book`
  FROM book b

我们还可以对author表进行连接,但在这里没有必要,除非book表中有authorid的值,而这些值没有出现在author表中(即没有外键约束,或者没有强制引用完整性)

SELECT COUNT(*)
  FROM ( -- authors of two or more books 
         SELECT b.authorid
           FROM book b
          GROUP
             BY b.authorid
         HAVING COUNT(1) >= 2  
       ) c
SELECT COUNT(*) AS `count_authors_of_exactly_one_book`
  FROM ( -- authors of exactly one book
         SELECT b.authorid
           FROM book b
          GROUP
             BY b.authorid
         HAVING COUNT(1) = 1  
       ) c
 类似资料:
  • 我使用的是一个具有多个属性的select元素。这只适用于Firefox和Chrome,但不适用于IE9/IE10或IE11。有什么建议让它也适用于IE浏览器吗?看起来IE不接受字符=>

  • 本文向大家介绍MySQL 选择所有列(*),包括了MySQL 选择所有列(*)的使用技巧和注意事项,需要的朋友参考一下 示例 询问 结果 您可以通过执行以下操作从一个连接的一个表中选择所有列: 最佳实践*除非正在调试或获取row(s)关联数组,否则不要使用,否则架构更改(ADD / DROP /重新排列列)可能会导致讨厌的应用程序错误。另外,如果提供结果集中所需的列列表,MySQL的查询计划程序通

  • 问题内容: 我正在寻找一个SQL查询来选择所有未由同一表上的另一个查询选择的记录。具体来说,我想选择所有具有特定字段(’fieldA’)重复项的记录,然后删除除其中一个记录以外的所有记录。 因此,一条select语句可能类似于以下内容(不起作用!): 如果不可能进行单个查询,那么最有效的解决方案是什么? 问题答案: 具体来说,我想选择所有具有特定字段(’fieldA’)重复项的记录,然后删除除其中

  • 问题内容: 如何在mysql中选择仅包含大写字符的字段或不包含任何小写字符的字段? 问题答案: 您可能需要使用区分大小写的排序规则。我相信默认值不区分大小写。例: 然后: 如果您不想在整个表中使用区分大小写的排序规则,则也可以使用其他答案中建议的@kchau子句。 让我们尝试使用不区分大小写的排序规则的表: 这不能很好地工作: 但是我们可以使用子句将名称字段整理为区分大小写的整理:

  • 问题内容: 如何在CSS表中选择除第一个元素以外的所有元素? 我尝试使用此方法,但发现它不起作用。 问题答案: 通过将类添加到第一个或后续的s中。没有单独使用CSS来选择所需行的跨浏览器方法。 但是,如果您不关心Internet Explorer 6、7或8:

  • 我有3个表:,,。 表“联接”和。它包含列:、、。 所以一本书可能属于很多类别,一个类别可能有很多本书。 我需要从检索除属于的书籍以外的所有书籍的查询。例如,我想要A类中的所有书籍,但前提是它们不属于B类或C类。我还需要按book.inserted列对结果进行排序。 我知道如何使用2个联接从中获取所有书籍,但不知道如何在结果中从其他类别中排除一些书籍。我无法在PHP中过滤书籍,因为我正在对搜索结果