我正在尝试获取最终记录,以总数和百分比的总和:
SELECT region, count(*) as total, concat(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
product) s
group by region;
我明白了:
Region TOTAL PERC
America 66 31.28%
Poland 89 42.18%
Europe 1 .47%
Australia 1 .47%
China 54 25.59%
预期为:
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%
我使用汇总,但将百分比减半。不知道为什么。
获得预期结果的最快方法(但从性能的角度来看不是最佳方法)是与您构建但未分区的相同查询进行并集。
喜欢这个:
SELECT region,
Count(*) AS total,
Concat(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 product) s
GROUP BY region
UNION
SELECT 'Total' Region,
Count(*) TOTAL,
Concat(Round(Count(*) * 100 / SUM(Count(*))
over (), 2), '%') PERC
FROM product