为什么此查询会出现无效列引用 's' 错误?

Why am I getting an invalid column reference 's' error with this query?

这里的内部连接可能有问题,因为如果 运行 分开,我加入的两个查询就没问题,但我不知道是什么... :( 对不起对于这里的大多数人来说,什么可能是一个简单的问题!

我尝试不将 s 作为用户引用,但我仍然收到无效列引用错误...

SELECT time_spent_bucket, totalrev
FROM
(
SELECT session_aggregate.app_timespent AS time_spent_bucket, COUNT(*) AS users
FROM
    (
    SELECT session_info.s, 
    case when SUM(session_info.session_length)/60 > 200 then "200+" 
    when SUM(session_info.session_length)/60 >= 100 then "100 <-> 200" 
    when SUM(session_info.session_length)/60 >= 50 then "50 <-> 99"
    when SUM(session_info.session_length)/60 >= 20 then "20 <-> 49"
    when SUM(session_info.session_length)/60 >= 10 then "10 <-> 19"
    when SUM(session_info.session_length)/60 >= 5 then "5 <-> 9"
    else "<5" end AS app_timespent
    FROM
        (
        SELECT kt_session(calc_session.s, calc_session.evt_lst, 5) AS (s, session_number, session_length)
        FROM 
            (
            SELECT session_set.s, collect_set(session_set.timestamps) evt_lst
            FROM 
                (
                SELECT total_list.s, total_list.timestamps
                FROM 
                    (
                    SELECT s, utc_timestamp AS timestamps
                    FROM appl9_evt
                    WHERE month = 201512
                    and s is not null
                    UNION ALL
                    SELECT s, utc_timestamp AS timestamps
                    FROM appl9_evt
                    WHERE month = 201512
                    and s is not null
                    ) total_list 
                )session_set
            GROUP BY session_set.s
            ) calc_session 
        ORDER BY s,session_number DESC
        )session_info
    GROUP BY session_info.s
    )session_aggregate
GROUP BY session_aggregate.app_timespent
ORDER BY time_spent_bucket) ts
INNER JOIN
(
SELECT s, v
FROM appl9_mtu
WHERE month = "201507"
GROUP BY s, v
        ) totalrev
ON totalrev.s = ts.s

您的连接引用 totalrev.s,但您在 totalrev 子查询中将该列别名为 'users'。只需更改您的连接以引用用户列,例如:

ON totalrev.users = ts.s

您也不能为 totalrev 子查询中的 s 列设置别名。

除上述之外,您的 ts 子查询也没有 's' 列,因此没有 ts.s 可以加入。您需要将其包含在 ts 子查询选择(以及分组依据)中,例如:

SELECT session_aggregate.s, session_aggregate.app_timespent AS time_spent_bucket, COUNT(*) AS users
...
GROUP BY session_aggregate.s, session_aggregate.app_timespent