多添加查询sql语句

多条件查询:

  1. 分步骤,先根据单个条件写sql语句
  2. 整合:
    select * from ( 满足条件1的语句 ) t1 , ( 满足条件2的语句 ) t2 where 条件1 and 条件2 …
  3. 优化sql
object Unti_5 extends App {
  val conf = new SparkConf().setAppName("").setMaster("local")
  val sc = new SparkContext(conf)
  val spark = SparkSession.builder().config(conf).getOrCreate()

  import spark.implicits._

  var rdd2 = spark.read.textFile("f:/ab/input").map(_.split("\t")).map(x => (x(0), x(1).toInt, x(2).toInt, x(3).toInt, x(4).toInt))
  val df = rdd2.toDF("name", "a1", "a2", "a3", "a4")
  df.createOrReplaceTempView("s")

  spark.sql("select * from s").show(50)
  //根据第四季度降水量阶梯分组,分组办法为0-500为一组、500-100为一组、1000-1500为一组、1500-2000为一组、大于2000为一组; 求每组当中全年GDP量最高的省份
  //1. a4/500 进行分组; div:整除
  //  spark.sql("select *,(a4 div 500) flag from s ").show
  //2. 求最大
  //  spark.sql("select flag,max(a1+a2+a3+a4) max_s from (select (a4 div 500) flag,* from s) group by flag ").show()
  //3. 同时满足 分组 和 最大 的两个条件 ,即从2个结果集找公共
  //  spark.sql("select flag,max(a1+a2+a3+a4) max_s from (select (a4 div 500) flag,* from s) group by flag ").show()
  spark.sql("select t1.* from (select *,(a4 div 500) flag from s ) t1,(select flag,max(a1+a2+a3+a4) max_s from (select (a4 div 500) flag,* from s) group by flag ) t2 where t1.flag = t2.flag and (t1.a1+t1.a2+t1.a3+t1.a4) = t2.max_s").show


}

结果:

  +--------+----+----+----+----+
|    name|  a1|  a2|  a3|  a4|
+--------+----+----+----+----+
|     北京市| 500| 900| 300| 300|
|     天津市| 500| 500| 600| 600|
|     上海市| 800|1200| 500| 500|
|     重庆市| 200| 300| 800| 800|
|     河北省| 800|1700| 200| 200|
|     山西省| 900| 200| 800|1200|
|     辽宁省| 500|1800| 900| 300|
|     吉林省|1200|1900| 500|1700|
|    黑龙江省| 300| 900|1200| 200|
|     江苏省|1700| 700| 300|1800|
|     浙江省| 200| 300|1700|1900|
|     安徽省|1800| 300| 200| 900|
|     福建省|1900| 600|1800| 700|
|     江西省| 900| 500|1900| 300|
|     山东省| 700| 800| 500| 600|
|     河南省| 300| 200|1200| 500|
|     湖北省| 600| 800| 300| 800|
|     湖南省| 500| 900|1700| 200|
|     广东省| 800| 500| 200| 800|
|     海南省| 200|1200|1800| 900|
|     四川省| 800| 300|1900| 300|
|     贵州省| 900|1700| 900| 600|
|     云南省| 500| 200| 700| 500|
|     陕西省|1200|1800| 300| 800|
|     甘肃省| 300|1900| 600| 200|
|     青海省|1700|1800| 700| 800|
|     台湾省| 200|1900| 300| 900|
|  内蒙古自治区|1800| 500| 600| 500|
| 广西壮族自治区|1900|1200| 500|1200|
|   西藏自治区| 900| 300| 800| 300|
| 宁夏回族自治区| 700|1700| 200|1700|
|新疆维吾尔自治区| 300| 200| 800| 200|
| 香港特别行政区| 600|1800| 900|1800|
| 澳门特别行政区| 800|1900| 300|1900|
+--------+----+----+----+----+
+-------+----+----+----+----+----+
|   name|  a1|  a2|  a3|  a4|flag|
+-------+----+----+----+----+----+
|    吉林省|1200|1900| 500|1700|   3|
|    福建省|1900| 600|1800| 700|   1|
|    江西省| 900| 500|1900| 300|   0|
|    青海省|1700|1800| 700| 800|   1|
|广西壮族自治区|1900|1200| 500|1200|   2|
+-------+----+----+----+----+----+
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值