Mysql SQL错误:表示计数中的列不存在

Mysql SQL错误:表示计数中的列不存在,mysql,sql,count,Mysql,Sql,Count,我得到这个错误: SELECT c.review, m.category, u.username, i.item, i.item_id, m.cat_id, COUNT(rv.review_id) totalCount FROM reviews AS c LEFT JOIN review_vote as rv ON c.review_id = rv.review_id LEFT JOIN users AS u ON u.user_id = c.user_id LEFT JOIN i

我得到这个错误:

SELECT c.review, m.category, u.username, i.item, i.item_id, m.cat_id, COUNT(rv.review_id) totalCount
FROM reviews AS c
LEFT JOIN review_vote as rv
   ON c.review_id = rv.review_id
LEFT JOIN users AS u
   ON u.user_id = c.user_id 
LEFT JOIN items AS i
   ON i.item_id = c.item_id
LEFT JOIN master_cat AS m
   ON m.cat_id = i.cat_id
WHERE LENGTH(c.review) > 50 AND m.category = 'Movies' AND totalCount > 2
GROUP BY rv.review_id
ORDER BY RAND()
LIMIT 1
我现在就选择这个专栏,为什么它不存在

我试图随机选择一个在表
rv
中列出(或投票2次或以上)的评论。此外,我不确定是否正确使用了聚合列(如
count()
)的
groupby
子句,您必须使用
HAVING
子句对其设置条件:

#1054 - Unknown column 'totalCount' in 'where clause' 
某些数据库(包括mysql)允许您使用列别名,例如
HAVING totalCount>2
,但使用表达式适用于所有数据库。ie for mysql(至少),您可以将其编码为:

SELECT c.review, m.category, u.username, i.item, i.item_id, m.cat_id, COUNT(rv.review_id) totalCount
FROM reviews AS c
LEFT JOIN review_vote as rv
   ON c.review_id = rv.review_id
LEFT JOIN users AS u
   ON u.user_id = c.user_id 
LEFT JOIN items AS i
   ON i.item_id = c.item_id
LEFT JOIN master_cat AS m
   ON m.cat_id = i.cat_id
WHERE LENGTH(c.review) > 50 AND m.category = 'Movies'
GROUP BY rv.review_id
HAVING COUNT(rv.review_id) > 2 -- Added this line!
ORDER BY RAND()
LIMIT 1
但它不能移植到所有其他数据库。

对于聚合列(如
count()
),必须使用
HAVING
子句对其设置条件:

#1054 - Unknown column 'totalCount' in 'where clause' 
某些数据库(包括mysql)允许您使用列别名,例如
HAVING totalCount>2
,但使用表达式适用于所有数据库。ie for mysql(至少),您可以将其编码为:

SELECT c.review, m.category, u.username, i.item, i.item_id, m.cat_id, COUNT(rv.review_id) totalCount
FROM reviews AS c
LEFT JOIN review_vote as rv
   ON c.review_id = rv.review_id
LEFT JOIN users AS u
   ON u.user_id = c.user_id 
LEFT JOIN items AS i
   ON i.item_id = c.item_id
LEFT JOIN master_cat AS m
   ON m.cat_id = i.cat_id
WHERE LENGTH(c.review) > 50 AND m.category = 'Movies'
GROUP BY rv.review_id
HAVING COUNT(rv.review_id) > 2 -- Added this line!
ORDER BY RAND()
LIMIT 1

但是它不能移植到所有其他数据库。

此时不能在
WHERE
子句中使用别名
totalCount
,因为尚未对聚合进行分组和评估。相反,使用
HAVING totalCount>2
我要补充的是,如果您没有将
SELECT
列表中的所有列都包含在
groupby
中,那么在MySQL中使用聚合时应该谨慎。大多数其他RDBMS不允许这样做,结果有时是不确定的。此时不能在
WHERE
子句中使用别名
totalCount
,因为尚未对聚合进行分组和评估。相反,使用
HAVING totalCount>2
我要补充的是,如果您没有将
SELECT
列表中的所有列都包含在
groupby
中,那么在MySQL中使用聚合时应该谨慎。大多数其他RDBMS不允许这样做,结果有时是不确定的。这正是我所需要的。谢谢这正是我所需要的。谢谢