执行算术时的数据透视表

问题描述 投票:-1回答:1

我有一个包含一些汇总计数的基表。

+------------+-----+-------+---------------+---------------+------------+------------+
|    date    | id  |  app  | ex_used_count | ex_base_count | used_count | base_count |
+------------+-----+-------+---------------+---------------+------------+------------+
| 2019-01-01 | 201 | api_c |            10 |           100 |         10 |        100 |
| 2019-01-01 | 304 | api_d |            10 |           100 |         10 |        100 |
| 2019-01-01 | 642 | api_c |            10 |           100 |         10 |        100 |
| 2019-01-01 | 111 | api_c |            10 |           100 |         10 |        100 |
| 2019-01-01 | 142 | api_c |            10 |           100 |         10 |        100 |
+------------+-----+-------+---------------+---------------+------------+------------+

根据这些计数,我需要计算一个百分比。根据app类型,其逻辑有所不同。这是一个用于处理这两种可能的计算的case语句:

SELECT
    yyyy_mm_dd,
    id,
    SUM(CASE
        WHEN (app = 'xxx' AND ex_status = 'zzz') THEN ex_used_count/ex_base_count
        WHEN (status = 'yyy') THEN used_count/base_count
    END) AS percentage
FROM
     schema.database
GROUP BY 
    1,2

如何在选择中旋转表,所以每个app值都变成一列。然后,对于每个新列,计算百分比?

输出应如下所示:

+------------+-----+-------+-------+
| yyyy_mm_dd | id  | api_c | api_d |
+------------+-----+-------+-------+
| 2019-01-01 | 201 | 0,1   | null  |
| 2019-01-01 | 304 | null  | 0,1   |
+------------+-----+-------+-------+
sql hive hiveql
1个回答
0
投票

您可以做的是创建两个这样的case语句。它效率不高,但是有效。

SELECT
    yyyy_mm_dd,
    id,
    SUM(CASE
        WHEN (app = 'API_C' AND ex_status = 'zzz') THEN ex_used_count/ex_base_count
        WHEN (status = 'yyy') THEN used_count/base_count )END AS API_C_percentage
    SUM(CASE
        WHEN (app = 'API_D' AND ex_status = 'zzz') THEN ex_used_count/ex_base_count
        WHEN (status = 'yyy') THEN used_count/base_count
    END) AS API_D_percentage
FROM
     schema.database
GROUP BY 
    1,2
© www.soinside.com 2019 - 2024. All rights reserved.