HQL面试题练习 —— 累加刚好超过各省GDP40%的地市名称

1 题目


现有各省地级市的gdp数据,求从高到底累加刚好超过各省GDP40%的地市名称,临界地市也需要。例如:

浙江省的杭州24% 宁波 20% ,杭州+宁波=44% 大于40% 取出杭州、宁波

江苏省的苏州19% 南京 14% 无锡 12%,苏州+南京=33% ,苏州+南京+无锡=45%,取出 苏州、南京、无锡。

+-------+-------+-----------+
| prov  | city  |  gdp_amt  |
+-------+-------+-----------+
| 浙江    | 杭州    | 20059.00  |
| 浙江    | 宁波    | 16452.80  |
| 浙江    | 温州    | 8730.60   |
| 浙江    | 绍兴    | 7791.00   |
| 浙江    | 嘉兴    | 7062.45   |
| 浙江    | 台州    | 6240.68   |
| 浙江    | 金华    | 6011.27   |
| 浙江    | 湖州    | 4015.10   |
| 浙江    | 衢州    | 2125.20   |
| 浙江    | 舟山    | 2100.80   |
| 浙江    | 丽水    | 1964.40   |
| 江苏    | 苏州    | 24653.37  |
| 江苏    | 南京    | 17421.40  |
| 江苏    | 无锡    | 15456.19  |
| 江苏    | 南通    | 11813.27  |
| 江苏    | 常州    | 10116.36  |
| 江苏    | 徐州    | 8900.44   |
| 江苏    | 扬州    | 7423.26   |
| 江苏    | 盐城    | 7403.87   |
| 江苏    | 泰州    | 6731.66   |
| 江苏    | 镇江    | 5264.07   |
| 江苏    | 淮安    | 5015.06   |
| 江苏    | 宿迁    | 4398.07   |
| 江苏    | 连云港   | 4363.61   |
+-------+-------+-----------+

2 建表语句


--建表语句
CREATE TABLE t_gdp (
prov string COMMENT '省份',
city string COMMENT '城市',
gdp_amt decimal(10,2) comment  'GDP'
) COMMENT '各省地市GDP'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
;
--插入数据
insert  into t_gdp(prov,city,gdp_amt)
values
('浙江','杭州',20059),
('浙江','宁波',16452.8),
('浙江','温州',8730.6),
('浙江','绍兴',7791),
('浙江','嘉兴',7062.45),
('浙江','台州',6240.68),
('浙江','金华',6011.27),
('浙江','湖州',4015.1),
('浙江','衢州',2125.2),
('浙江','舟山',2100.8),
('浙江','丽水',1964.4),
('江苏','苏州',24653.37),
('江苏','南京',17421.4),
('江苏','无锡',15456.19),
('江苏','南通',11813.27),
('江苏','常州',10116.36),
('江苏','徐州',8900.44),
('江苏','扬州',7423.26),
('江苏','盐城',7403.87),
('江苏','泰州',6731.66),
('江苏','镇江',5264.07),
('江苏','淮安',5015.06),
('江苏','宿迁',4398.07),
('江苏','连云港',4363.61);

3 题解


第一步:计算每个城市占比,累积占比。

select
    *,
    round(lj_gdp_amt/pro_gdp_amt,2) lj_precent
from
    (select
        *,
        sum(gdp_amt) over(partition by prov) pro_gdp_amt,
        sum(gdp_amt) over(partition by prov order by gdp_amt) lj_gdp_amt
    from t_gdp)t

执行结果

在这里插入图片描述

第二步:求取累加求和 <60% 的数据

select
    *,
    round(lj_gdp_amt/pro_gdp_amt,2) lj_precent
from
    (select
        *,
        sum(gdp_amt) over(partition by prov) pro_gdp_amt,
        sum(gdp_amt) over(partition by prov order by gdp_amt) lj_gdp_amt
    from t_gdp)t
where round(lj_gdp_amt/pro_gdp_amt,2)<0.6; -- 不能写 lj_precent <0.6

执行结果

在这里插入图片描述

第三步:求补集,得到最后结果。

select
    t1.prov,
    t1.city
from
    t_gdp t1
left join
    (select
        *,
        round(lj_gdp_amt/pro_gdp_amt,2) lj_precent
    from
        (select
            *,
            sum(gdp_amt) over(partition by prov) pro_gdp_amt,
            sum(gdp_amt) over(partition by prov order by gdp_amt) lj_gdp_amt
        from t_gdp)t
    where round(lj_gdp_amt/pro_gdp_amt,2)<0.6)t2
on t1.prov=t2.prov and t1.city=t2.city
where t2.city is null;

执行结果

在这里插入图片描述

相关推荐

  1. Go —— GMP面试

    2024-06-07 19:30:01       18 阅读
  2. 面试练习

    2024-06-07 19:30:01       24 阅读
  3. 面试经典150(42-44)

    2024-06-07 19:30:01       39 阅读
  4. 面试经典150(47-49)

    2024-06-07 19:30:01       35 阅读
  5. 安卓 Kotlin 面试 31-40

    2024-06-07 19:30:01       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 19:30:01       4 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 19:30:01       5 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 19:30:01       4 阅读
  4. Python语言-面向对象

    2024-06-07 19:30:01       4 阅读

热门阅读

  1. Redux 入门+面试题

    2024-06-07 19:30:01       16 阅读
  2. openfeign服务相互调用碰到问题总结

    2024-06-07 19:30:01       15 阅读
  3. python生成器

    2024-06-07 19:30:01       11 阅读
  4. Windows11+Ubuntu24.04双系统安装及配置

    2024-06-07 19:30:01       14 阅读
  5. Ubuntu 22.04 搭建 KubeSphere 3.4.1 集群

    2024-06-07 19:30:01       15 阅读
  6. 云原生架构相关技术_2.云原生微服务

    2024-06-07 19:30:01       15 阅读
  7. 深入理解 MySQL 中的 SQL_NO_CACHE 关键字

    2024-06-07 19:30:01       20 阅读
  8. Ajax入门

    2024-06-07 19:30:01       17 阅读
  9. LeetCode hot100-61-G

    2024-06-07 19:30:01       17 阅读
  10. 汽车电子电器架构深入分析

    2024-06-07 19:30:01       12 阅读