1 package com.xujunqi.zuoye 2 3 import org.apache.flink.api.scala._ 4 import org.apache.flink.table.api.{Table, TableEnvironment} 5 import org.apache.flink.types.Row 6 7 object FlinkTable_Student { 8 def main(args: Array[String]): Unit = { 9 //配置运行环境 10 val env = ExecutionEnvironment.getExecutionEnvironment 11 //设置全局并行度 12 env.setParallelism(1) 13 //设置TableEnvironment 14 val tEnv = TableEnvironment.getTableEnvironment(env) 15 //学生数据 16 val stuData: List[(String, String, Int)] = List( 17 ("xiaoming", "english", 90), 18 ("xiaoming", "math", 80), 19 ("xiaohong", "english", 98), 20 ("xiaohong", "math", 82) 21 ) 22 //读取数据 23 val stuDataSet: DataSet[(String, String, Int)] = env.fromCollection(stuData) 24 //封装数据 25 val stu: DataSet[Student] = stuDataSet.map(x => Student(x._1, x._2, x._3)) 26 //注册表 27 tEnv.registerDataSet("stu", stu) 28 29 //2.查询所有数据 30 val allData: Table = tEnv.sqlQuery("select * from stu") 31 //将Table转换成DataSet 32 val sql1 = tEnv.toDataSet[Row](allData) 33 println("查询所有数据:") 34 sql1.print() 35 36 val sql2 = tEnv.toDataSet[Row](tEnv.sqlQuery("select subject,sum(score) from stu group by subject")) 37 println("统计学生各科总分:") 38 sql2.print() 39 40 val sql3 = tEnv.toDataSet[Row](tEnv.sqlQuery("select name,avg(score) from stu group by name")) 41 println("统计学生平均分:") 42 sql3.print() 43 44 val sql4 = tEnv.toDataSet[Row](tEnv.sqlQuery("select subject,max(score) from stu group by subject")) 45 println("各科最高分的学生姓名:") 46 sql4.print() 47 48 /*val sql5 = tEnv.toDataSet[Row](tEnv.sqlQuery("select s.* from (select subject,min(score) m from stu group by subject having subject='english') t,stu s where t.subject=s.subject and t.m=s.score")) 49 println("english最底分的学生姓名:") 50 sql5.print() 51 52 val sql8 = tEnv.toDataSet[Row](tEnv.sqlQuery("select s.* from (select subject,max(score) m from stu group by subject having subject='english') t,stu s where t.subject=s.subject and t.m=s.score")) 53 println("english最高分的学生姓名:") 54 sql8.print() 55 */ 56 val sql6 = tEnv.toDataSet[Row](tEnv.sqlQuery("select name,sum(score) from stu group by name")) 57 println("求出每名学生的总分:") 58 sql6.print() 59 60 val sql7 = tEnv.toDataSet[Row](tEnv.sqlQuery("select name from stu group by name order by sum(score) desc limit 1")) 61 println("总分最高的学生姓名:") 62 sql7.print() 63 64 /* //统计学生人数 65 val sqlcount = tEnv.toDataSet[Row](tEnv.sqlQuery("select count(*) from (select count(*) from stu group by name ")) 66 println("求学生人数") 67 sqlcount.print()*/ 68 } 69 70 } 71 72 case class Student(name: String, subject: String, score: Int) 73 74 /* 75 select t1.name from 76 (select max(t1.sumscore) as maxscore from 77 (select name, sum(score) as su) t2 join (select name, sum(score) as sumscore from t_stu group by name) 78 t1 on t2.maxscore=t1.sumscoremscore from t_stu group by name) t1*/ 79 80 /* 81 select t1.name from (select max(t1.sumscore) as maxscore from 82 (select name, sum(score) as sumscore from t_stu group by name) t1) 83 t2 join (select name, sum(score) as sumscore from t_stu group by name) t1 on t2.maxscore=t1.sumscore 84 * */