SQL SUM AND PERCENTAGE

问题描述 投票:1回答:1

我正在尝试获取最终记录,以总数和百分比的总和:

    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%

我使用汇总,但将百分比减半。不知道为什么。

sql oracle sum subquery percentage
1个回答
0
投票

获得预期结果的最快方法(但从性能的角度来看不是最佳方法)是与您构建但未分区的相同查询进行并集。

喜欢这个:

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 
© www.soinside.com 2019 - 2024. All rights reserved.