我正在尝试获取最终记录,以总数和百分比的总和:
SELECT region, count(*) as total, concat(to_char(round(count(*) * 100/ sum(count(*)) over() ,2),'990.99'),
'%') perc
FROM (SELECT
CASE
WHEN Substr(veh_vin, 1, 1) >= 'A'
AND Substr(veh_vin, 1, 1) <= 'C' THEN 'America'
WHEN Substr(veh_vin, 1, 1) >= 'J'
AND Substr(veh_vin, 1, 1) <= 'R' THEN 'Poland'
WHEN Substr(veh_vin, 1, 1) >= 'S'
AND Substr(veh_vin, 1, 1) <= 'Z' THEN 'Euro'
WHEN Substr(veh_vin, 1, 1) BETWEEN 1 AND 5 THEN 'North Africa'
WHEN Substr(veh_vin, 1, 1) BETWEEN 6 AND 7 THEN 'Australia'
WHEN Substr(veh_vin, 1, 1) BETWEEN 8 AND 9 THEN 'China'
ELSE 'UNKNOWN'
END AS region
FROM vehicle) s
GROUP BY region
UNION
SELECT 'Total' Region,
Count(*) TOTAL,
concat(to_char(count(*) * 100/ sum(count(*)) over(),'990.99'),
'%') perc
FROM vehicle ;
我明白了:
Region TOTAL PERC
America 66 31.28%
Poland 89 42.18%
Europe 1 .47%
Australia 1 .47%
China 54 25.59%
Total 211 100.00%
预期为:
Region TOTAL PERC
America 66 31.28%
Poland 89 42.18%
Europe 1 0.47%
Australia 1 0.47%
China 54 25.59%
Total 211 99.99%
我正在尝试获取99.99的总值,这是perc列的总和,我该怎么做?
这符合要求
with regions as (
SELECT region, count(*) as total, round(count(*) * 100/ sum(count(*)) over(),2) perc
FROM (SELECT
CASE
WHEN Substr(veh_vin, 1, 1) >= 'A'
AND Substr(veh_vin, 1, 1) <= 'C' THEN 'America'
WHEN Substr(veh_vin, 1, 1) >= 'J'
AND Substr(veh_vin, 1, 1) <= 'R' THEN 'Poland'
WHEN Substr(veh_vin, 1, 1) >= 'S'
AND Substr(veh_vin, 1, 1) <= 'Z' THEN 'Euro'
WHEN Substr(veh_vin, 1, 1) BETWEEN 1 AND 5 THEN 'North Africa'
WHEN Substr(veh_vin, 1, 1) BETWEEN 6 AND 7 THEN 'Australia'
WHEN Substr(veh_vin, 1, 1) BETWEEN 8 AND 9 THEN 'China'
ELSE 'UNKNOWN'
END AS region
FROM vehicle) s
GROUP BY region )
select region, total, concat(to_char(perc,'990.99'), '%') perc from regions
union all
select 'Total' region, sum(Total) total, concat(to_char(sum(Perc),'990.99'), '%') perc
from regions