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);

Demo

此方法在每个代码的第一个字母上使用 CASE 表达式来分配类别。然后,我们按类别汇总并找到总数和百分比。注意ROLLUP用于在结果集的底部生成总记录。作为其副作用,我们乘以 200%,因为摘要行已经包含整个 table 计数,然后被计数两次。