SQL语句无效



我必须根据以下条件从数据库中提取列表:

"在下面添加一个列表,显示在节目中排名前十的狗。这个被定义为10平均得分最高的狗,只要他们参加的比赛超过一个事件。只显示狗的名字、品种和平均分。">

这是我的实现,但它不能正常工作,我得到一个错误消息:

Select name, breed, score
from
(Select dogs.name as name, breeds.name as breed, avg(score) as score, count(breeds.id) as count
from entries
join breeds on entries.dog_id = breeds.id
join dogs on breeds.id = dogs.breed_id
group by breed
order by count)x
where count >= 2
group by breed; 

#1055 - SELECT列表的表达式#1不在GROUP BY子句中,并且包含非聚合列'u2167487.dogs.name'功能依赖于GROUP BY子句中的列;这是与sql_mode=only_full_group_by不兼容

我寻找解决方案,但没有为我工作

您的查询有很多问题。您似乎想要按狗和品种进行聚合,然后对计数进行过滤,所以我只需要直接执行此操作,而不需要子查询:

SELECT d.name AS name, b.name AS breed, AVG(score) AS score
FROM entries e
INNER JOIN breeds b ON e.dog_id = b.id
INNER JOIN dogs d ON b.id = d.breed_id
GROUP BY 1, 2
HAVING COUNT(*) >= 2;

确切的错误信息意味着你在严格的GROUP BY模式下运行MySQL,并且选择了没有出现在GROUP BY子句中的非聚合列。这不是有效的ANSI SQL,因此出现错误消息。

对三个字段执行SELECT操作,但是只有一个字段在GROUP BY子句中。将所有三个字段添加到GROUP BY子句中,或者对未包含的字段应用聚合函数。

当使用GROUP BY时,所有的列名必须包含在GROUP BY中,或者有聚合函数应用于它们。

Select name, breed, score
from
(Select dogs.name as name, breeds.name as breed, avg(score) as score, count(breeds.id) as count
from entries
join breeds on entries.dog_id = breeds.id
join dogs on breeds.id = dogs.breed_id
group by dogs.name as name, breeds.name
order by count)x
where count >= 2
group by name, breed, score; 

在这个例子中,你应该使用HAVING子句

Select * from 
(
Select dogs.name as name, breeds.name as breed, avg(score) as score
from entries
join breeds on entries.dog_id = breeds.id
join dogs on breeds.id = dogs.breed_id
group by dogs.name as name, breeds.name
having count(*) >= 2
) AS x
ORDER BY "count"

最新更新