Mysql 在SQL中使用AVG和WHERE时无法查看所有列

Mysql 在SQL中使用AVG和WHERE时无法查看所有列,mysql,sql,average,where-clause,window-functions,Mysql,Sql,Average,Where Clause,Window Functions,图书isbn用户ID用户评级评论日期 当我询问 SELECT * ,AVG(rating) FROM geektextdb.rating WHERE book_isbn = '1501142976';` 我只得到了表中的第二行,但我正试图得到第二和第四行 另外,我不确定这篇文章的格式是否正确,我经常使用这个网站,但是任何关于格式的提示都会有所帮助。这不是一个有效的聚合查询。如果您想要该特定图书isbn的总体平均值,那么: select avg(rating) avg_rating from g

图书isbn用户ID用户评级评论日期

当我询问

SELECT * ,AVG(rating)
FROM geektextdb.rating
WHERE book_isbn = '1501142976';`
我只得到了表中的第二行,但我正试图得到第二和第四行


另外,我不确定这篇文章的格式是否正确,我经常使用这个网站,但是任何关于格式的提示都会有所帮助。

这不是一个有效的聚合查询。如果您想要该特定
图书isbn
的总体平均值,那么:

select avg(rating) avg_rating
from geektextdb.rating 
where book_isbn = '1501142976'
这将为您提供一个标量结果集(一行一列),其中包含该书的平均评级

另一方面,如果您希望所有行以及每行上重复的平均评级,则可以使用窗口函数(仅适用于MySQL 8.0):


如果您希望同时对所有书籍获得相同的结果,以及每本书的平均评分,那么下面是等效的查询

聚合(每本书一行):

窗口:

select r.*, avg(rating) over(partition by book_isbn) avg_rating
from geektextdb.rating r

我认为您需要的是窗口函数,而不是聚合:

SELECT r.*, AVG(rating) OVER (PARTITION BY book_isbn)
FROM geektextdb.rating r
WHERE book_isbn = '1501142976';

如果您试图查看所有记录,该书的平均isbn在每行中重复,这是正确的答案根据您的查询,您将得到1行,这是正确的。查询实际上不应该运行。这完全没有道理。
select book_isbn, avg(rating) avg_rating
from geektextdb.rating 
group by book_isbn
select r.*, avg(rating) over(partition by book_isbn) avg_rating
from geektextdb.rating r
SELECT r.*, AVG(rating) OVER (PARTITION BY book_isbn)
FROM geektextdb.rating r
WHERE book_isbn = '1501142976';