当前位置: 首页 > 面试题库 >

如何计算表中每个外键ID的实例数?

姜嘉荣
2023-03-14
问题内容

这是我简单的SQL问题…

我有两个表:

图书

-------------------------------------------------------
| book_id | author | genre | price | publication_date |
-------------------------------------------------------

命令

------------------------------------
| order_id | customer_id | book_id |
------------------------------------

我想创建一个查询,返回:

--------------------------------------------------------------------------
| book_id | author | genre | price | publication_date | number_of_orders |
--------------------------------------------------------------------------

换句话说,返回“书籍”表中 所有 行的每一列,以及一个计算得出的名为“
number_of_orders”的列,该列计算每本书在“订单”表中出现的次数。(如果订单表中未出现一本书,则该书 在结果集中列出,但“
number_of_orders”应该 为零

到目前为止,我已经提出了:

SELECT
    books.book_id,
    books.author,
    books.genre,
    books.price,
    books.publication_date,
    count(*) as number_of_orders
from books
left join orders
on (books.book_id = orders.book_id)
group by
    books.book_id,
    books.author,
    books.genre,
    books.price,
    books.publication_date

几乎是 正确的,但事实并非如此,因为即使从未在Orders表中列出一本书,“
number_of_orders”也将为1。而且,由于我缺乏SQL知识,因此我确定此查询效率很低。

编写此查询的正确方法是什么?(就其价值而言,这需要在MySQL上运行,因此我不能使用任何其他供应商特定的功能)。

提前致谢!


问题答案:

您的查询几乎是正确的,这是正确的方法(也是最有效的方法)

SELECT books.*, count(orders.book_id) as number_of_orders        
from books
left join orders
on (books.book_id = orders.book_id)
group by
    books.book_id

COUNT(*)可能在计数中包含NULL值,因为它对所有行进行计数,而COUNT(orders.book_id)没有因为它忽略给定字段中的NULL值。



 类似资料:
  • 问题内容: 谁能告诉我如何计算一个类的实例数? 这是我的代码 该类变量将用于计数创建的Bicycle类实例的数量,而测试人员类将创建数量众多的Bicycle类实例,并演示Bicycle类和class变量的工作方式。我看了遍整个互联网,似乎找不到任何东西,有人可以告诉我该怎么做,在此先感谢:) 问题答案: 由于变量仅初始化一次,并且在所有实例之间共享,因此您可以: 阅读有关JLS-8.3.1.1。中

  • 问题内容: 我可以列出所有目录 我试图使用以下命令列出每个目录的内容并计算每个目录中的文件数 但这是求和的总和 有没有一种方法可以计算每个目录中的文件数? 问题答案: 假设您已找到GNU,请让其查找目录,然后让bash进行其余操作:

  • 问题内容: 有没有一种方法可以查询数据库以找出所有表中有多少行? IE 希望你能指教 问题答案:

  • 问题内容: 已关闭 。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗? 添加详细信息并通过编辑此帖子来澄清问题。 11个月前关闭。 改善这个问题 我有一个清单: 我想要另一个具有三个值均值的列表,因此新列表为: 新列表中只有6个值,因为第一个元素中只有18个元素。 我正在寻找一种精巧的方法来完成此操作,并为大量列表提供最少的步骤。 问题答案: 您可以在3个间隔中迭代使用for循环

  • 我有一个从应用程序中提取的数据库(我没有创建它)。我需要提取数据以用于不同的应用程序。主表包含3个外键,每个外键链接到其他表。我想用其他表中的特定列值替换FK ID。主表如下所示: 数据: 状态、雇员和类型都是外键。它们链接到具有以下布局的表: 用户: 类型: 地位: 我希望主桌看起来像这样 我已经尝试了我在谷歌上找到的各种东西,但是我不能让它以我想要的方式出现。我来自PHP背景,但我在SQL方面

  • 问题内容: 如果我有英文文章或英文小说,并且想计算每个单词出现多少次,用Java编写的最快算法是什么? 有人说您可以使用Map ()完成此操作,但我想知道如何知道关键字是什么?每篇文章都有不同的词,您如何知道“关键”词,然后在其数量上加上一个? 问题答案: 这个数字“我是”只是一个字