为什么group by语句不返回正确的行?



我正在学习一个教程,我不明白为什么我的查询不工作。

我有两个表:

authors

<表类> id 名称 tbody><<tr>1JK罗琳2史蒂芬·金3阿加莎·克里斯蒂4苏斯博士

首先,您应该使用限定列引用编写查询,以便更容易执行:

SELECT a.name, COUNT(*)   
FROM books b JOIN
authors a
ON b.author_id = a.id
GROUP BY b.author_id;

为什么这个不行?显然SELECTGROUP BY列是不同的!它们甚至不是来自同一个表。

下面的可以工作:

SELECT a.name, COUNT(*)   
FROM books b JOIN
authors a
ON b.author_id = a.id
GROUP BY a.id;

如果将authors.id声明为主键或unique(这是很有可能的),则此操作将有效。这是因为一个叫做函数依赖的功能,它要求当唯一键或主键在GROUP BY键中时引用任何列。

但是,如果没有这样的显式声明,那么在GROUP BY子句中需要a.name

简单地说,任何未指定聚合函数的列都需要出现在group by语句中。

在你的情况下

select name, ..

需要
group by name, ...