我昨天遇到了这个问题。我正在寻找一个解释。
关于 SQL 查询,下列哪项陈述是正确的?
P :即使没有 GROUP BY 子句,SQL 查询也可以包含 HAVING 子句
问:SQL 查询只有在有 GROUP BY 子句时才能包含 HAVING 子句
R : GROUP BY 子句中使用的所有属性都必须出现在 SELECT 子句中
S :并非 GROUP BY 子句中使用的所有属性都需要出现在 SELECT 子句中
(A) P 和 R。
(B) P 和 S。
(C) Q 和 R。
(D) Q 和 S。
我选择 A 作为答案。但实际上 B 是正确答案。
我想知道有些网站提到 R 是正确的,而其他网站说 S 是正确的。后两者之间哪个说法是正确的?
“R”是不正确的,因为这表示每个被分组的字段也需要被选中,这绝对不是真的。子句中的字段
GROUP BY
定义了如何折叠与这些字段相关的一组行。但是没有理由你必须SELECT
在列表中返回那些相同的字段。如果您想在非分组字段上进行聚合,则不需要也返回分组字段。例如以下是一个有效的查询:当然,该查询的结果没有太大意义,因为它只会返回一个总金额列表,而没有实际
ProductName
关联的金额。因此,不知道哪个总数用于哪个产品。GROUP BY
但是子句中的字段可以像这样添加到SELECT
列表中(没有任何聚合函数):这使得一个有意义的查询。但总而言之,“R”不正确的原因是因为它说“必须”这是不正确的,而是它们可能出现在
SELECT
列表中。