DROP TABLE student;
create TEMPORARY TABLE student
(
sid string,
sname string,
sage int,
ssex string
);
INSERT into student values("01","zhaolei",19900101,"M");
INSERT into student values("02","qiandian",19901221,"M");
INSERT into student values("03","sunfeng",19900520,"M");
INSERT into student values("04","liyun",19900806,"M");
INSERT into student values("05","zhoumei",19911201,"F");
INSERT into student values("06","wulan",19920301,"F");
INSERT into student values("07","zhenzhu",19890701,"F");
INSERT into student values("08","wangju",19900120,"F");
DROP TABLE temp_course;
create TEMPORARY table temp_course(
cid string,
cname string,
tid string
);
INSERT into temp_course values("01","china","02");
INSERT into temp_course values("02","math","01");
INSERT into temp_course values("03","english","03");
create TEMPORARY table temp_teacher(
tid string,
tname string);
INSERT into temp_teacher values("01","zhangsan");
INSERT into temp_teacher values("02","lisi");
INSERT into temp_teacher values("03","wangwu");
create TEMPORARY table sc(
sid string,
cid string,
score int
);
INSERT into sc values("01","01",80);
INSERT into sc values("01","02",90);
INSERT into sc values("01","03",99);
INSERT into sc values("02","01",70);
INSERT into sc values("02","02",60);
INSERT into sc values("02","03",80);
INSERT into sc values("03","01",80);
INSERT into sc values("03","02",80);
INSERT into sc values("03","03",80);
INSERT into sc values("04","01",50);
INSERT into sc values("04","02",30);
INSERT into sc values("04","03",20);
INSERT into sc values("05","01",76);
INSERT into sc values("05","02",87);
INSERT into sc values("06","01",31);
INSERT into sc values("06","03",34);
INSERT into sc values("07","02",89);
INSERT into sc values("07","03",98);
-- 查詢“某1”課程比“某2”課程成績高的所有學生的學號
SELECT s1.sid FROM sc s1
JOIN sc s2
on s1.sid=s2.sid and s1.cid =1 and s2.cid =2
WHERE s1.score > s2.score;
-- 查詢平均成績大于60分的同學的學號和平均成績;
SELECT sc.sid, avg(sc.score) as avg_s FROM sc GROUP BY sc.sid HAVING avg_s > 60;
select sid,round(avg(score),1) from sc group by sid having avg(score)>60;
-- 查詢所有同學的學號、姓名、選課數(shù)、總成績
SELECT student.sid,student.sname,count(1), sum(sc.score) FROM student
JOIN sc
on student.sid=sc.sid
GROUP BY student.sid,student.sname;
select student.sid,student.sname,s.num,s.total
from
(
select sid id,count(cid) num,sum(score) total
from sc group by sid
) s
join student
on s.id=student.sid;
-- 查詢姓“李”的老師的個數(shù)
SELECT count(1) FROM temp_teacher WHERE temp_teacher.tname like "li%";
-- 5.查詢沒學過“張三”老師課的同學的學號、姓名
SELECT DISTINCT student.sid,student.sname FROM student
JOIN sc
on student.sid=sc.sid
JOIN temp_course
on sc.cid = temp_course.cid
JOIN temp_teacher
on temp_course.tid = temp_teacher.tid and temp_teacher.tname != 'zhangshan';
-- GROUP BY student.sid,student.sname;
-- 6.查詢學過數(shù)學并且也學過編號語文課程的同學的學號、姓名
-- 兩種思路
SELECT student.sid,student.sname FROM student
JOIN sc
on sc.sid=student.sid
JOIN temp_course course1
on course1.cid=sc.cid and (course1.cname in ('math','china'))
GROUP BY student.sid,student.sname HAVING count(1)=2;
select * from (SELECT stu1.sid,stu1.sname FROM student stu1
JOIN sc sc1
on sc1.sid = stu1.sid
JOIN temp_course course1
on course1.cid = sc1.cid and course1.cname = 'china') s1
join (SELECT stu1.sid,stu1.sname FROM student stu1
JOIN sc sc1
on sc1.sid = stu1.sid
JOIN temp_course course1
on course1.cid = sc1.cid and course1.cname = 'math') s2
on s1.sid = s2.sid;
-- 7、查詢學過“張三”老師所教的所有課的同學的學號、姓名
SELECT student.sid,student.sname FROM student
JOIN sc
on sc.sid = student.sid
JOIN temp_course
on temp_course.cid = sc.cid
JOIN temp_teacher
on temp_course.tid = temp_teacher.tid
WHERE temp_teacher.tname='zhangsan';
-- 8.查詢課程編號“01”的成績比課程編號“02”課程低的所有同學的學號、姓名
SELECT student.sid,student.sname FROM student
JOIN sc sc1
on sc1.sid = student.sid
JOIN sc sc2
on sc2.sid = student.sid
WHERE sc1.cid ='01' and sc2.cid='02' and sc1.score < sc2.score;
-- 9.查詢所有課程成績小于60分的同學的學號、姓名
SELECT student.sid,student.sname FROM student
JOIN sc
on sc.sid=student.sid
where sc.score < 60
GROUP BY student.sid,student.sname;
SELECT student.sid,student.sname FROM student
WHERE exists(
-- sc.score 有多個,會分別執(zhí)行,必須都小于60才返回真
SELECT * FROM sc WHERE sc.sid = student.sid and sc.score < 60
);
SELECT student.sid, student.Sname FROM sc,student WHERE sc.sid = student.sid and sc.score < 60
GROUP BY student.sid, student.Sname;
hive sql練習1
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 引言目前實習階段,工作中用到最多的是hive sql。以前沒有發(fā)現(xiàn),sql,代碼也可寫的十分優(yōu)雅,有一些知識點不容...
- 與Apache Hive的兼容性# Spark SQL 被設(shè)計成與Hive Metastore(元數(shù)據(jù)), Ser...
- 查詢?nèi)w學生的學號與姓名 查詢選修了課程的學生姓名 ----hive的group by 和集合函數(shù) 查詢學生的總?cè)?..