当我使用“(在子查询中)user_id”时,生成语法错误

时间:2018-11-28 07:45:47

标签: mysql

我下面有一个users表。

用户具有Referal_code,referred_by列。用户具有以下数据。

+----+--------------+------------+
| id | referal_code | refered_by |
+----+--------------+------------+
|  1 | abc          | null       |
|  2 | xxx          | abc        |
+----+--------------+------------+

我有Reviews表,我存储其他用户的用户reviewe。 它确实有user_id个评估列。

+----+---------+------------+
| id | user_id | evaluation |
+----+---------+------------+
| 28 |       2 |          4 |
| 32 |       2 |          6 |
+----+---------+------------+

我正在计算每个用户推荐的用户的平均评价为3或更高。

SELECT users.*, COUNT(
        SELECT reviews.user_id FROM reviews 
        WHERE reviews.user_id IN( 
           SELECT A2.id FROM users as A2 WHERE A2.refered_by = users.referal_code
        )
        HAVING AVG(evaluation) >= 3) as total_3_estrelas
FROM users
WHERE 1

我在以下位置遇到语法错误#1064:在user_id输入处

我期望的结果:

+----+--------------+------------+------------------+
| id | referal_code | refered_by | total_3_estrelas |
+----+--------------+------------+------------------+
|  1 | abc          | null       |                1 |
|  2 | xxx          | abc        |                0 |
+----+--------------+------------+------------------+

1 个答案:

答案 0 :(得分:1)

看看是否有帮助:

SELECT A.ID, A.REFERAL_CODE, A.REFERED_BY, COALESCE(TOTAL_3_ESTRELAS,0) AS TOTAL_3_ESTRELAS
FROM USERS A
LEFT JOIN
(SELECT REFERED_BY, COUNT(*) AS TOTAL_3_ESTRELAS
FROM USERS U
INNER JOIN (SELECT USER_ID, AVG(EVALUATION)
FROM REVIEWS 
GROUP BY USER_ID
HAVING AVG(EVALUATION)>=3) R
ON U.ID=R.USER_ID
GROUP BY REFERED_BY) T
ON A.REFERAL_CODE=T.REFERED_BY;

从更深层的嵌套条件出发,首先我计算了REVIEWS上每个user_id的平均评估,丢弃了平均低于3的USER_ID,然后与USERS进行了内部联接,并按REFERED_BY分组以获得所需的计数。最后,我进行了左连接,以您期望的形式获得输出。