【发布时间】:2018-01-10 20:30:23
【问题描述】:
我的查询有什么问题?
select p.name, p.photo, (
SELECT AVG(count(ra.id_prof)/sum(ra.rate))
FROM rating ra
WHERE ra.id_prof = p.id) as rating
from prof_table p, matier_prof mp, matiere m, niveau ni
where p.id=mp.id_prof and mp.id_matiere=m.id_mat and m.id_niv=ni.id_niv
having p.name like '%word%' or p.email like '%word%' or p.adresse like '%word%' or
p.biographie like '%word%' or m.matiere like '%word%' or ni.niveau like '%word%'
【问题讨论】:
-
用样本数据和期望的结果提出另一个问题。您的查询毫无意义。
-
不能将一个聚合函数的结果放到另一个聚合函数中:
avg(count()/sum()) -
您的查询有几个问题。首先,您使用的是 1992 年变得多余的旧连接语法(逗号分隔连接)。为什么要使用它?然后你聚合(COUNT,SUM),但是为什么要聚合聚合(AVG)?然后,您在尚未分组且也不是聚合的列上使用 HAVING 子句。最好按照戈登的建议去做;告诉我们您想要达到的目标。这可能相当简单。
-
@ThorstenKettner 非常感谢你的评论有答案问题是 AVG 这是一个愚蠢的错误谢谢你,我很抱歉这个愚蠢的问题
-
看起来双重聚合的尝试是这里最大的问题(因为它会导致错误)。旧的 JOIN 样式语法很难看,但会运行。 HAVING 子句毫无意义,所有这些条件都应移至 WHERE 子句。示例数据和所需结果将帮助我们引导您找到可行的解决方案。