Hive - SUM 中的 ELSE

Hive - ELSE in SUM

以下 运行 在 RDBMS 数据库上作为 SQL 没问题。但是,这在配置单元上 运行 失败。

SELECT
        entry_date,
        customer,
        cust_loc,
        SUM(run_time) AS TOTAL_RUN,
        SUM(CASE WHEN run_time BETWEEN 10000 AND 20000 THEN entry_date ELSE 0 END) AS SLOT_1,
        SUM(CASE WHEN run_time BETWEEN 200001 AND 30000 THEN entry_date ELSE 0 END) AS SLOT_2,
        SUM(CASE WHEN run_time BETWEEN 31000 AND 40000 THEN entry_date ELSE 0 END) AS SLOT_3
FROM
        cust_run_details
WHERE
        app_env IN ('a','b')
        AND entry_date = '2015-02-01'
        AND flag_set='U'
GROUP BY
        customer,
        customer,
        cust_loc

我在 HIVE 上 运行 时得到的错误是

FAILED: SemanticException [Error 10016]: Line 6:80 Argument type mismatch '0': The expression after ELSE should have the same type as those after THEN: "string" is expected but "int" is found

如何将其转换为等效的 Hive?请任何想法在这里帮助我

将 SUM 更改为 COUNT 并删除了 "ELSE 0"。花了很长时间才到那里。叹息..

SELECT
        entry_date,
        customer,
        cust_loc,
        SUM(run_time) AS TOTAL_RUN,
        COUNT(CASE WHEN run_time BETWEEN 10000 AND 20000 THEN entry_date END) AS SLOT_1,
        COUNT(CASE WHEN run_time BETWEEN 200001 AND 30000 THEN entry_date END) AS SLOT_2,
        COUNT(CASE WHEN run_time BETWEEN 31000 AND 40000 THEN entry_date END) AS SLOT_3
FROM
        cust_run_details
WHERE
        app_env IN ('a','b')
        AND entry_date = '2015-02-01'
        AND flag_set='U'
GROUP BY
        customer,
        customer,
        cust_loc

假设 entry_datedate,您可能不想 sum() 它。如果你想要不同范围内 运行 次的总和,那么你想要这样的 select

 SELECT entry_date,
        customer,
        cust_loc,
        SUM(run_time) AS TOTAL_RUN,
        SUM(CASE WHEN run_time BETWEEN 10000 AND 20000 THEN run_time ELSE 0 END) AS SLOT_1,
        SUM(CASE WHEN run_time BETWEEN 200001 AND 30000 THEN run_time ELSE 0 END) AS SLOT_2,
        SUM(CASE WHEN run_time BETWEEN 31000 AND 40000 THEN run_time ELSE 0 END) AS SLOT_3

如果您想要计算不同范围内的 运行 次,则:

 SELECT entry_date,
        customer,
        cust_loc,
        SUM(run_time) AS TOTAL_RUN,
        SUM(CASE WHEN run_time BETWEEN 10000 AND 20000 THEN 1 ELSE 0 END) AS SLOT_1,
        SUM(CASE WHEN run_time BETWEEN 200001 AND 30000 THEN 1 ELSE 0 END) AS SLOT_2,
        SUM(CASE WHEN run_time BETWEEN 31000 AND 40000 THEN 1 ELSE 0 END) AS SLOT_3

如果 entry_date 可能是 NULL 而您想忽略这些记录,那么您可以在 WHEN 条件中包含 and entry_date is not null