我有一个包含一些汇总计数的基表。
+------------+-----+-------+---------------+---------------+------------+------------+
| 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 |
+------------+-----+-------+-------+
您可以做的是创建两个这样的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