我知道如果在SELECT语句中有一个聚合函数,那么语句中的所有其他值必须是聚合函数或列在GROUP BY子句中。我不明白为什么会这样。
例如:
SELECT Name, 'Jones' AS Surname FROM People
我的输出结果是:
NAME SURNAME
Dave Jones
Susan Jones
Amy Jones
因此,数据库管理系统从每行中取出一个值,并将单个值附加到结果集中。这很好。但如果这样有效,为什么我不能这样做:
SELECT Name, COUNT(Name) AS Surname FROM People
这似乎是相同的想法,从每一行中取一个值并添加单个值。但不是:
NAME SURNAME
Dave 3
Susan 3
Amy 3
我得到的错误信息是:
您尝试执行一个查询,但该查询未将指定的表达式“ContactName”作为聚合函数的一部分包含在内。
我知道这是不允许的,但这两种情况看起来非常相似,我不明白为什么不能这样做。这是为了使DBMS更容易实现吗?如果有人能向我解释为什么它不能按照我想象中的方式工作,我会非常感激。
count(Name)
的含义是什么? - MatGROUP BY
时,无论是显式还是隐式地(通过在SELECT
部分中使用聚合函数),都不能同时拥有两者。 - ypercubeᵀᴹOVER()
子句中的PARTITION BY
,它们往往在查询中更接近,事情可能就会开始变得清晰起来。有时候我希望SQL少一点结构化 :) - onedaywhen