📌  相关文章
📜  教资会网络 | UGC NET CS 2018 年 12 月 – II |问题 58(1)

📅  最后修改于: 2023-12-03 15:10:15.962000             🧑  作者: Mango

UGC NET CS 2018 年 12 月 – II | 问题 58

问题描述

考虑下面的 SQL 查询:

SELECT  C.name, COUNT(*)
FROM    Customers C, Orders O
WHERE   C.cid = O.cid
GROUP BY C.name
HAVING COUNT(*) = (
        SELECT MAX(COUNT(*))
        FROM Orders
        GROUP BY cid);

以下哪个选项是正确的?

A. 它返回每个顾客的名称和他们的订单数量。 如果有一个顾客多次下单 则计数器为1。 B. 它返回所有顾客名称与他们的订单数量,其中一次下单也会增加计数器。 C. 它返回每个顾客的名称和他们的订单数量。 如果有一个顾客多次下单,则它仅计数一次。 D. 它将引发运行时错误。

解题思路

这个问题是关于 SQL 查询的一些考察。首先,我们需要从查询语句的 SQL 语法来看。「SELECT」是用来选取数据表中的字段的,「FROM」则是选取数据表,「WHERE」是条件选择,「GROUP BY」则会将所选的字段按照 GROUP BY 字段进行分类,并且对每个组做集合函数的操作,这里使用了 COUNT 函数。最后,HAVING 是用来选择 GROUP BY 分组后,进行过滤的,使用了一个子查询,去查询最大的订单数量。

根据上述分析,我们可以得到以下答案:

C. 它返回每个顾客的名称和他们的订单数量。 如果有一个顾客多次下单,则它仅计数一次。

查询语句有以下几个部分:

  • 选择了 Customers 表中的名称和订单数量
  • 数据来源于 Customers 和 Orders 两个表
  • WHERE 语句用来匹配 Customers 和 Orders 表中的 cid
  • GROUP BY 用来分组 Customers 表中的名称
  • 这个查询中的 COUNT 函数用来统计每个客户的订单数量
  • 最后,HAVING 子句用来筛选出订单数量最大的客户