HiveSQL实战——大数据开发面试高频SQL题

查询每个区域的男女用户数

0 问题描述

每个区域内男生、女生分别有多少个

1 数据准备
sql 复制代码
use wxthive;
create table t1_stu_table
(
    id  int,
    name   string,
    class string,
    sex  string
);
insert overwrite table  t1_stu_table
values
     (4,'张文华','二区','男'),
     (3,'李思雨','一区','女'),
     (1,'王小凤','一区','女'),
     (7,'李智瑞','三区','男'),
     (6,'徐文杰','二区','男'),
     (8,'徐雨秋','三区','男'),
     (5,'张青云','二区','女'),
     (9,'孙皓然','三区','男'),
     (10,'李春山','三区','男'),
     (2,'刘诗迪','一区','女');
2 数据分析
sql 复制代码
select
       sex ,
       count(case when class = '一区' then sex else null end ) as 1area,
       count(case when class = '二区' then sex else null end ) as 2area,
       count(case when class = '三区' then sex else null end ) as 3area
from
     t1_stu_table
group by sex;
3 小结

==========================*****==========================

每个季度绩效得分大于70分的员工

0 问题描述

计算每个季度绩效得分都大于70分的员工

1 数据准备
sql 复制代码
create table t2_score_info_table
(
    id  int,
    name   string,
    subject string,
    score  int
);

insert overwrite table  t2_score_info_table
values
 (1,'王小凤','第一季度',88),
 (1,'王小凤','第二季度',55),
 (1,'王小凤','第三季度',72),
 (3,'徐雨秋','第一季度',92),
 (3,'徐雨秋','第二季度',77),
 (3,'徐雨秋','第三季度',93),
 (2,'张文华','第一季度',70),
 (2,'张文华','第二季度',77),
 (2,'张文华','第三季度',91);
2 数据分析
sql 复制代码
select
       id,
       name,
       min(score) as min_score
from
     t2_score_info_table
group by
         id,
         name
having min_score > 70;

ps:只要保证每个季度的每位员工的最小绩效得分大于70分,就可以说明这位员工该季度的绩效得分都大于70分。

3 小结

==========================*****==========================

行列互换

0 问题描述

把下表所示的纵向存储数据的方式 改成 横向存储数据的方式**(行转列)**

​​​​​​​

1 数据准备
sql 复制代码
create table t3_row_col_table
(
    year_num  int,
    month_num   int,
    sales int
);

insert overwrite table  t3_row_col_table
values
(2019,1,100),
(2019,2,200),
(2019,3,300),
(2019,4,400),
(2020,1,200),
(2020,2,400),
(2020,3,600),
(2020,4,800);
2 数据分析
sql 复制代码
select
     year_num,
     sum(case when month_num= 1 then sales end ) as m1,
     sum(case when month_num= 2 then sales end ) as m2,
     sum(case when month_num= 3 then sales end ) as m3,
     sum(case when month_num= 4 then sales end ) as m4
from t3_row_col_table
group by year_num
3 小结

==========================*****==========================

计算用户留存情况(*)

0 问题描述

计算用户的次日留存数、三日留存数、七日留存数

1 数据准备
sql 复制代码
create table t4_user_login
(
    uid   int,
    login_time string
);


insert overwrite table  t4_user_login
values
(1,'2021-4-21 6:00'),
(1,'2021-4-24 10:00'),
(1,'2021-4-25 19:00'),
(2,'2021-4-22 10:00'),
(2,'2021-4-28 9:00'),
(2,'2021-4-29 14:00'),
(3,'2021-4-27 8:00'),
(3,'2021-4-28 10:00');
2 数据分析
sql 复制代码
select
       count(case when day_value = 1 then uid  else null end ) as cnt1,
       count(case when day_value = 3 then uid  else null end ) as cnt2,
       count(case when day_value = 7 then uid  else null end ) as cnt3
from
     (select
           uid,
           max(date_format(login_time,'yyyy-MM-dd')),
           min(date_format(login_time,'yyyy-MM-dd')),
           datediff(max(date_format(login_time,'yyyy-MM-dd')), min(date_format(login_time,'yyyy-MM-dd'))) as day_value
     from t4_user_login
     group by uid
     ) t1;
3 小结

==========================*****==========================

筛选最受欢迎的课程

0 问题描述

筛选最受欢迎的课程course

1 数据准备
sql 复制代码
create table t5_course_table
(
    uid   int,
    name string,
    grade string,
    course string
);

insert overwrite table  t5_course_table
values
(1,'王小凤','一年级','心理学'),
(2,'刘诗迪','二年级','心理学'),
(3,'李思雨','三年级','社会学'),
(4,'张文华','一年级','心理学'),
(5,'张青云','二年级','心理学'),
(6,'徐文杰','三年级','计算机'),
(7,'李智瑞','一年级','心理学'),
(8,'徐雨秋','二年级','计算机'),
(9,'孙皓然','三年级','社会学'),
(10,'李春山','一年级','社会学');
2 数据分析
sql 复制代码
-- 解法一:
select
      course,
      count(course) as course_count
from t5_course_table
group by  course
order by course_count desc 
limit 1;
     
-- 解法二:
select
      course,
      course_count
from 
    (
     select
          course,
          count(course) as course_count,
          row_number()over(order by count(course) desc) as rn
     from t5_course_table
     group by  course
    )t1
where rn = 1;
3 小结

==========================*****==========================

筛选出每个年级最受欢迎的三门课程

0 问题描述

筛选出每个年级最受欢迎的三门课程

1 数据准备
sql 复制代码
create table t5_course_table
(
    uid   int,
    name string,
    grade string,
    course string
);

insert overwrite table  t5_course_table
values
(1,'王小凤','一年级','心理学'),
(2,'刘诗迪','二年级','心理学'),
(3,'李思雨','三年级','社会学'),
(4,'张文华','一年级','心理学'),
(5,'张青云','二年级','心理学'),
(6,'徐文杰','三年级','计算机'),
(7,'李智瑞','一年级','心理学'),
(8,'徐雨秋','二年级','计算机'),
(9,'孙皓然','三年级','社会学'),
(10,'李春山','一年级','社会学');
2 数据分析
sql 复制代码
select
      grade,
      course
from
  (
    select
          grade,
          course,
          cnt,
          row_number() over(partition by grade order by cnt desc) as rn
    from
        (
         select
              grade,
              course,
              count(uid) as cnt
         from t5_course_table
         group by  grade, course
        )t1
  )t2
where rn <= 3;
​​​​​​​
3 小结

==========================*****==========================

参考文章:

大数据开发面试必会的SQL 30题!!!_大数据sql面试题-CSDN博客

相关推荐
武子康1 天前
大数据-236 离线数仓 - 会员指标验证、DataX 导出与广告业务 ODS/DWD/ADS 全流程
大数据·后端·apache hive
武子康2 天前
大数据-235 离线数仓 - 实战:Flume+HDFS+Hive 搭建 ODS/DWD/DWS/ADS 会员分析链路
大数据·后端·apache hive
DianSan_ERP3 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
够快云库3 天前
能源行业非结构化数据治理实战:从数据沼泽到智能资产
大数据·人工智能·机器学习·企业文件安全
AI周红伟3 天前
周红伟:智能体全栈构建实操:OpenClaw部署+Agent Skills+Seedance+RAG从入门到实战
大数据·人工智能·大模型·智能体
B站计算机毕业设计超人3 天前
计算机毕业设计Django+Vue.js高考推荐系统 高考可视化 大数据毕业设计(源码+LW文档+PPT+详细讲解)
大数据·vue.js·hadoop·django·毕业设计·课程设计·推荐算法
计算机程序猿学长3 天前
大数据毕业设计-基于django的音乐网站数据分析管理系统的设计与实现(源码+LW+部署文档+全bao+远程调试+代码讲解等)
大数据·django·课程设计
B站计算机毕业设计超人3 天前
计算机毕业设计Django+Vue.js音乐推荐系统 音乐可视化 大数据毕业设计 (源码+文档+PPT+讲解)
大数据·vue.js·hadoop·python·spark·django·课程设计
十月南城3 天前
数据湖技术对比——Iceberg、Hudi、Delta的表格格式与维护策略
大数据·数据库·数据仓库·hive·hadoop·spark
中烟创新3 天前
灯塔AI智能体获评“2025-2026中国数智科技年度十大创新力产品”
大数据·人工智能·科技