首页 > 解决方案 > Hive:将 Cast 与 COALESCE 结合使用并为其设置别名

问题描述

对于给定的用例。我正在尝试将 COALESCE 与 CAST 一起使用。在线尝试了几个资源,但没有一个有帮助(可能是由于我的知识有限)。

我尝试了以下查询以通过别名 COALESCE 获取结果

SELECT
    S.id,
    S.subj_cd,
    S.wrk_cd,
    COALESCE(S.ord_cnt,0) AS order,
    COALESCE(M.trans_cnt,0) AS trans
FROM
    DB_USER.ORD_CNT S
LEFT OUTER JOIN DB_USER.TRANS_CNT M ON
    (S.id = M.id
    AND S.subj_cd = M.subj_cd
    AND S.wrk_cd = M.wrk_cd
WHERE   S.id=111111
GROUP BY
    S.id,
    S.subj_cd,
    S.wrk_cd,
    order,
    trans

但这不起作用。收到错误: Invalid column reference 'ord_cnt'

然后尝试了以下方法:

SELECT
    S.id,
    S.subj_cd,
    S.wrk_cd,
    CAST(COALESCE(S.ord_cnt,0)) AS order,
    COALESCE(M.trans_cnt,0) AS trans
FROM
    DB_USER.ORD_CNT S
LEFT OUTER JOIN DB_USER.TRANS_CNT M ON
    (S.id = M.id
    AND S.subj_cd = M.subj_cd
    AND S.wrk_cd = M.wrk_cd
WHERE   S.id=111111
GROUP BY
    S.id,
    S.subj_cd,
    S.wrk_cd,
    order,
    trans

但这也因错误而失败: Invalid table alias or column reference 'order':

这对我来说非常简单和愚蠢。但是已经花了几个小时来弄清楚但没有得到任何结果。任何前进的方向都会非常有帮助。

标签: hivegroup-byhiveql

解决方案


固定的:

SELECT
    S.id,
    S.subj_cd,
    S.wrk_cd,
    COALESCE(S.ord_cnt,0) AS `order`,
    COALESCE(M.trans_cnt,0) AS trans
FROM
    DB_USER.ORD_CNT S
LEFT OUTER JOIN DB_USER.TRANS_CNT M ON
    S.id = M.id
    AND S.subj_cd = M.subj_cd
    AND S.wrk_cd = M.wrk_cd
WHERE   S.id=111111
GROUP BY
    S.id,
    S.subj_cd,
    S.wrk_cd,
    COALESCE(S.ord_cnt,0),  --use un-aliased columns in the group by
    COALESCE(M.trans_cnt,0) --use un-aliased columns in the group by

推荐阅读