Select 基于类别的声明
Select statement based on category
我有一个table这样的
Code
A123
B3123
C93485
D345
E29845
代码列各行首字母分类如下:
Char Category
A-B A
C B
D-E C
我想像这样显示输出 table
Category Total Percentage
A 2 0.4%
B 1 0.2%
C 2 0.4%
Total 5 1.0%
我不确定如何开始。非常感谢任何提示或帮助
这是一个选项:
SELECT
CASE WHEN SUBSTR(Code, 1, 1) IN ('A', 'B') THEN 'A'
WHEN SUBSTR(Code, 1, 1) = 'C' THEN 'B'
ELSE 'C' END AS Category,
COUNT(*) AS Total,
200.0 * COUNT(*) / SUM(COUNT(*)) OVER () AS Percentage
FROM yourTable
GROUP BY
ROLLUP(CASE WHEN SUBSTR(Code, 1, 1) IN ('A', 'B') THEN 'A'
WHEN SUBSTR(Code, 1, 1) = 'C' THEN 'B'
ELSE 'C' END);
此方法在每个代码的第一个字母上使用 CASE
表达式来分配类别。然后,我们按类别汇总并找到总数和百分比。注意ROLLUP
用于在结果集的底部生成总记录。作为其副作用,我们乘以 200%,因为摘要行已经包含整个 table 计数,然后被计数两次。
我有一个table这样的
Code
A123
B3123
C93485
D345
E29845
代码列各行首字母分类如下:
Char Category
A-B A
C B
D-E C
我想像这样显示输出 table
Category Total Percentage
A 2 0.4%
B 1 0.2%
C 2 0.4%
Total 5 1.0%
我不确定如何开始。非常感谢任何提示或帮助
这是一个选项:
SELECT
CASE WHEN SUBSTR(Code, 1, 1) IN ('A', 'B') THEN 'A'
WHEN SUBSTR(Code, 1, 1) = 'C' THEN 'B'
ELSE 'C' END AS Category,
COUNT(*) AS Total,
200.0 * COUNT(*) / SUM(COUNT(*)) OVER () AS Percentage
FROM yourTable
GROUP BY
ROLLUP(CASE WHEN SUBSTR(Code, 1, 1) IN ('A', 'B') THEN 'A'
WHEN SUBSTR(Code, 1, 1) = 'C' THEN 'B'
ELSE 'C' END);
此方法在每个代码的第一个字母上使用 CASE
表达式来分配类别。然后,我们按类别汇总并找到总数和百分比。注意ROLLUP
用于在结果集的底部生成总记录。作为其副作用,我们乘以 200%,因为摘要行已经包含整个 table 计数,然后被计数两次。