• 数据库练习2


    1、子查询的用法(也可实现分组求最大值)

    ALL的用法(很常用)

    1)在每一个州中找出最大面积的国家,列出洲份 continent, 国家名字 name 及面积 area。 (有些国家的记录中,AREA是NULL,没有填入资料的。)

    数据库world表:

    namecontinentareapopulationgdpcapitaltldflag
    Afghanistan Asia 652230 25500100 20364000000 Kabul .af //upload.wikimedia.org/wikipedia/commons/9/9a/Flag_of_Afghanistan.svg
    Albania Europe 28748 2821977 12044000000 Tirana .al //upload.wikimedia.org/wikipedia/commons/3/36/Flag_of_Albania.svg
    Algeria Africa 2381741 38700000 207021000000 Algiers .dz //upload.wikimedia.org/wikipedia/commons/7/77/Flag_of_Algeria.svg
    Andorra Europe 468 76098 3222000000 Andorra la Vella .ad //upload.wikimedia.org/wikipedia/commons/1/19/Flag_of_Andorra.svg

                ...

    分析area中含有null值,若不含null值,sql中可采用row_number() over(partition by ) 分组排序实现.

    代码:

    select a.name, a.continent , a,area from 
    (select name ,continent ,area ,
    row_number() over(partition by continent order by area desc) rank
    from world ) a 
    where a.rank =1
    

     area 中含有null值,采用子查询的方式:(2个表比较实现查询结果:比较条件区域相同,比较a的面积大于b的面积,区域下的所有其他项,引入all函数).

    select continent ,name, area from world a 
    where a.area >=
    all(select area from world b where a.continent = b.continent and b.area >0)
    

    2)找出洲份,当中全部国家都有少于或等于 25000000 人口. 在这些洲份中,列出国家名字name,continent 洲份和population人口。

    select name, continent ,population from world   a
    where 25000000 >  all(
    select b.population from world b 
    where a.continent  = b.continent and b.population >0
    ) 
    

    3) 有些国家的人口是同洲份的所有其他国的3倍或以上。列出 国家名字name 和 洲份 continent。

    select name,continent from world a 
    where a.population/3 >= all(
    select b.population  from world b 
    where a.continent = b.continent and b.population >0 and a.name <> b.name 
    )
    

    4)列出有至少100百萬(1億)(100,000,000)人口的洲份。

    select distinct(continent) from world a
    where 100000000 <= all(
    select sum(b.population ) from world b where a.continent = b.continent
    ) 
    
    # 第二种 group by ..having ..
    select continent  from (
    select continent ,sum(population ) from world 
    group by continent 
    having sum(population ) >= 100000000  )a 
    

      

    二、coalesce函数

    与null有关的函数,填充第一个不是null的值,若都没有值结果为null

      COALESCE(x,y,z) = x if x is not NULL
      COALESCE(x,y,z) = y if x is NULL and y is not NULL
      COALESCE(x,y,z) = z if x and y are NULL but z is not NULL
      COALESCE(x,y,z) = NULL if x and y and z are all NULL
    

      

  • 相关阅读:
    【】Libevent源码解析
    sftp使用
    世界boss设计
    记一次薪酬谈判的教训 .
    一些常用的文件操作代码
    一位总经理的辞职信,以及回复
    JMeter安装、文档参考
    Charles——charles代理菜单proxy总结——external proxy 外部代理设置
    JDK安装
    Charles——charles常用功能——重定向
  • 原文地址:https://www.cnblogs.com/hqczsh/p/11721465.html
Copyright © 2020-2023  润新知