是否可以检查AS语句变量的位置?MySQL

是否可以检查AS语句变量的位置?MySQL,mysql,where-clause,Mysql,Where Clause,有人能解释一下为什么我不能在我的AS变量中使用WHERE子句(不知道它们到底叫什么) 如果我在同一个地方做了类似于a.n=gameone的事情 我能不能在像fra一样创建的AVG(b.r)的var上使用WHERE子句 如果我能,我怎么能 SELECT a.id, a.n, a.t, a.d, AVG(b.r) AS fra, COUNT(b.id) as tvotes FROM `games` a LEFT JOIN `games_ratings` b ON a.id = b.id WH

有人能解释一下为什么我不能在我的AS变量中使用WHERE子句(不知道它们到底叫什么)

如果我在同一个地方做了类似于a.n=gameone的事情

我能不能在像fra一样创建的
AVG(b.r)的var上使用WHERE子句

如果我能,我怎么能

SELECT
  a.id, a.n, a.t, a.d,
  AVG(b.r) AS fra, COUNT(b.id) as tvotes
FROM `games` a
LEFT JOIN `games_ratings` b
ON a.id = b.id
WHERE fra >= 2
GROUP BY a.id
ORDER BY a.ts
DESC LIMIT 0, 50

否,所选的值不在
WHERE
的范围内,因为所选的行取决于
WHERE
。如果确实要对它们执行条件,请使用
HAVING
,但请注意,
HAVING
子句未优化


有关
HAVING

的更多信息,请参阅。对于使用AS子句创建的VAR,您必须使用它,而不是在特定位置使用它吗?可能重复:嗯。当您需要通过聚合函数筛选数据时,您必须使用
HAVING
。这真的是我的最佳选择吗?想法是根据我的游戏的评级进行排序。因此这几乎是我得到int的唯一方法。好的,我刚刚试过了。以前从未尝试过,但它确实奏效了。谢谢!我不能在它说的6分钟内把这个答案标记出来。所以我会在它允许的时候标记它。再次感谢。使用
HAVING
的性能真的有问题吗(本着避免过早优化的精神)?如果是这样的话,您也可以反规范化(即,除了单独的评级之外,还可以显式存储平均评级)。另一种方法是使用子查询筛选出没有评级至少为
2
(因此平均值低于
2
)的游戏,但这实际上可能会慢一些。