对比mysql和hive:mysqlzhong ,分组求不同组的前几条记录

举报
yd_226342373 发表于 2021/05/20 02:37:10 2021/05/20
【摘要】 一、第一题 1、建表语句 create table mian61( hobby varchar(20), name varchar(20), age int )charset=utf8; 12345 2、表中插入数据 insert into mian61 values ('a','huangxiaoming',45), ('c','huangxiaoming',...

一、第一题

1、建表语句

create table mian61( hobby varchar(20), name varchar(20), age int
)charset=utf8;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

2、表中插入数据

insert into mian61 values
('a','huangxiaoming',45),
('c','huangxiaoming',45),
('d','huangxiaoming',45),
('f','huangxiaoming',45),
('b','huangzitao',36),
('c','huangzitao',36),
('d','huangzitao',36),
('e','huangzitao',36),
('c','huanglei',41),
('d','huanglei',41),
('e','huanglei',41),
('a','liushishi',22),
('d','liushishi',22),
('e','liushishi',22),
('e','liudehua',39),
('f','liudehua',39),
('d','liudehua',35),
('d','liuyifei',35),
('a','huangxiaoming',45),
('e','liuyifei',35);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

3、需求如下

  • 求出不同爱好中,年龄最大的两个人(爱好,年龄,姓名)

4、实现代码

select 
	a.* 
from 
	mian61 a 
where
	(select count(*) from mian61 b where b.hobby= a.hobby and a.age > b.age)<2 
order by 
	a.hobby,a.age desc;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

结果如下:
在这里插入图片描述

二、第二题

1、建表语句

create table mian62( sid int, name varchar(20), subject varchar(20), score int
)charset=utf8;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2、表中插入数据

insert into mian62 values
(1,'张三','语文',90),
(1,'张三','数学',80),
(1,'张三','外语',70),
(1,'张三','物理',55),
(1,'张三','化学',59),
(2,'李四','语文',88),
(2,'李四','数学',78),
(2,'李四','外语',71),
(2,'李四','物理',51),
(2,'李四','化学',60),
(3,'王五','语文',95),
(3,'王五','数学',83),
(3,'王五','外语',80),
(3,'王五','物理',60),
(3,'王五','化学',58);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

3、需求如下

  • 求出每个学生中,分数最高的两个科目(姓名,科目,分数)
  • 求出每个科目中,分数最高的前2名(姓名,科目,分数)

4、求出每个学生中,分数最高的两个科目(姓名,科目,分数)

select 
	*
from 
	mian62 a
where 
	(select count(*) from mian62 b where a.name=b.name and a.score < b.score)<2
order by 
	a.name,a.score desc;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

结果如下:
在这里插入图片描述

5、求出每个科目中,分数最高的前2名(姓名,科目,分数)

select 
	*
from 
	mian62 a
where 
	(select count(*) from mian62 b where a.subject=b.subject and a.score < b.score)<2
order by 
	a.subject,a.score desc;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

结果如下:
在这里插入图片描述

文章来源: blog.csdn.net,作者:数据分析与统计学之美,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_41261833/article/details/103481820

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。