分组并选择不在聚集函数中的其他列是否有效



我知道在使用group-by-clause的查询中,只能选择group-by-clause或使用聚合函数中的列。但在我下面的例子中,它是有效的(project_name列(。我想知道其中的逻辑。这在什么条件下有效?

项目表

--------[/tr>
id 名称 xxxxx
p001 ML1 --------
p002 AI2

Postgres实现了ANSI-92 SQL标准中定义的这种行为。当通过唯一列进行聚合时,也可以选择任何其他列,因为这些列在功能上依赖于GROUP BY子句中出现的唯一列。换句话说,如果我们知道project表中记录的id值,那么我们也就知道该表中任何其他列的值。因此,在您的查询中,只通过项目id进行聚合是合法的,但也可以选择名称。

但是,在其他一些数据库(如Oracle和SQL Server(上,不支持这种行为。在那里,您必须使用以下版本的查询:

SELECT proj.id, proj.name, COUNT(*) AS count_user
FROM project proj
INNER JOIN uer_liked_projects ulp
ON proj.id = ulp.project_id
GROUP BY proj.id, proj.name;

在这里,我们需要将name列添加到GROUP BY子句中,以获得要编译的代码。

相关内容

最新更新