为什么此查询会出现无效列引用 '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
这里的内部连接可能有问题,因为如果 运行 分开,我加入的两个查询就没问题,但我不知道是什么... :( 对不起对于这里的大多数人来说,什么可能是一个简单的问题!
我尝试不将 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