2012-02-13 51 views
1

会有人解释为什么我似乎无法使用WHERE子句对我作为变量(不知道那些被实际调用。可能检查AS语句变量中的WHERE? MySQL的

,如果我这样做在它的工作原理完全相同的地方WHERE a.n = gameone

我不能使用像AVG(b.r) AS fra创建一个变种多数民众赞成在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 
+0

难道你没有尝试'HAVING' – 2012-02-13 07:42:47

+0

是你必须使用,而不是专门为使用AS子句创建的变量使用WHERE吗? – brybam 2012-02-13 07:44:00

+0

可能的重复:http://stackoverflow.com/questions/4611451/mysql-as-in-where-statement – k102 2012-02-13 07:45:22

回答

3

没有,被选择的值不是SCOP e代表WHERE,因为哪些行选择取决于WHERE。如果你真的想对他们做一个条件,使用HAVING但注意HAVING子句没有优化。

有关HAVING的更多信息,请参阅the MySQL documentation on SELECT

+0

这真的是我最好的选择吗?这个想法是根据我的比赛评分来排序。所以它几乎是我可以得到整数的唯一方法。 – brybam 2012-02-13 07:44:53

+0

好吧,刚试过HAVING。从来没有过它的头,但它的确有窍门。谢谢!我不能将这个答案标记为6分钟。所以当它让我时,它就会标记出来。再次感谢。 – brybam 2012-02-13 07:49:28

+0

使用HAVING'实际上是一个问题(避免过早优化)的性能?如果是这样,你也可以反规范化(即除了个人评级之外,明确地存储平均评级)。另一件要做的事情可能是使用子查询过滤掉没有至少为2的评分(因此平均低于2),但实际上可能会更慢。 – perelman 2012-02-13 07:53:13