HIve: Использование Cast с COALESCE и совмещение его - PullRequest
2 голосов
/ 01 мая 2019

Для данного варианта использования. Я пытаюсь использовать 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':

Это довольно просто и глупо с моей стороны. Но потратил пару часов, чтобы понять это, но никуда не деться. Любое направление движения будет действительно полезным.

1 Ответ

2 голосов
/ 01 мая 2019

Исправлено:

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
...