数据蛙9套SQL面试题笔记

本文汇总了9道SQL面试题目,涉及MySQL中的数据连接、乱码处理、行转列、聚合函数等。解题思路包括使用GROUP_CONCAT、窗口函数、数据透视等技巧,同时分享了解决MySQL导入中文数据乱码和处理日期格式的问题。
摘要由CSDN通过智能技术生成

数据分析SQL面试题目9套汇总

  • 题目来源:

https://www.jianshu.com/p/0f165dcf9525
在这里插入图片描述
关于这套题的笔记

一、
在这里插入图片描述
解题思路:

  • 1、用concat实现连接 2、还需要按照“用户号”分组,将每组中的前两个“场景”号间接,这时需要用到 GROUP_CONCAT
    函数(注意必须和GROUP BY 语句合用),即 GROUP_CONCAT(changjing SEPARATOR’-’) …
    GROPY BY userid

    3、对相同“用户号”、相同“场景”取最小的访问时间
    4、整体思路:首先按照“用户号”和“场景”分组,取最小访问时间,然后,以”用户号“为组,按照“用户号”、“场景”和“访问时间”排序,序号为新的一列;将以上查询命名为新表;用concat和GROUP_CONCAT 实现连接,注意要求新的序号列小于2.

注意:排序的过程可以用窗口函数来做,mysql8.0以上版本才支持窗口函数

##利用窗口函数(mysql8以上版本)
SELECT CONCAT(t.userid,'-',GROUP_CONCAT(t.changjing SEPARATOR'-')) AS result
FROM(
SELECT userid,changjing,inttime,
	row_number() over(PARTITION BY userid ORDER BY userid,changjing,inttime) AS new_rank
FROM(
	SELECT userid,changjing, MIN(inttime) inttime FROM datafrog_test1 GROUP BY userid,changjing
) tem

) t
WHERE t.new_rank<=2
GROUP BY t.userid;
##不利用窗口函数
SELECT CONCAT(t.userid,'-',GROUP_CONCAT(t.changjing SEPARATOR'-')) AS result
FROM(
 SELECT userid,changjing,inttime,
     IF(@tmp=userid,@rank:=@rank+1,@rank:=1) AS new_rank,
     @tmp:=userid AS tmp
 FROM (SELECT userid,changjing, MIN(inttime) inttime FROM datafrog_test1 GROUP BY userid,changjing)temp
 ORDER BY userid,changjing
    )t
WHERE t.new_rank<=2
GROUP BY t.userid;

三个排序窗口函数:

  • RANK():计算排序(如果存在相同位次的记录,则会跳过之后的位次,比如:1,2,2,4)
  • DENSE_RANK():计算排序(即使存在相同位次的记录,也不会跳过之后的位次,比如:1,2,2,3)
  • ROW_NUMBER():赋予连续且唯一的位次,比如:1,2,3,4

二、
在这里插入图片描述

  • mysql 导入中文数据乱码
    导入语句:
LOAD DATA INFILE 'D:/camera.csv' 
INTO TABLE userinfo
FIELDS TERMINATED BY ','
IGNORE  1 LINES;

这里要把原来的默认路径改为空;
先用

show variables like '%secure%';

找到my文件的路径,然乎按记事本打开my,ini文件,把原路径改为空
在这里插入图片描述即,secure-file-priv=""

首先:

set names gbk;

然后导入还是会报错,百度一下,说是,需要建立gbk编码的库,和gbk编码的表
重新建库建表的语句:

CREATE DATABASE xiangji CHARACTER SET GBK COLLATE gbk_chinese_ci;
USE xiangji;
CREATE TABLE userinfo(
uid VARCHAR(10),
app_name VARCHAR(20) CHARACTER SET GBK COLLATE gbk_chinese_ci,
duration INT(10),
times INT(10),
dayno VARCHAR(30)
);

现在导入不报错了,但是中文字体是乱码,然后就继续百度:
又一次找到my.ini这个文件,打开它,改两个地方;

在这里插入图片描述图源:https://jingyan.baidu.com/article /4ae03de3ebb0d83eff9e6b16.html

改完了重启mysql(计算机管理),汉字就不是乱码了。
以上,over。回归正题,原文解释很清晰,这里就不介绍了。

SELECT day1,COUNT(DISTINCT a.uid) AS 活跃用户数,
COUNT(DISTINCT CASE WHEN day2-day1=1 THEN a.uid END) AS 次日留存用户数,
COUNT(DISTINCT CASE WHEN day2-day1=3 THEN a.uid END) AS 三日留存用户数,
COUNT(DISTINCT CASE WHEN day2-day1=7 THEN a.uid END) AS 七日留存用户数,
CONCAT(ROUND(COUNT(DISTINCT CASE WHEN day2-day1=1 THEN a.uid END)/COUNT(DISTINCT a.uid)*100,2),'%') AS 次日留存率,
CONCAT(ROUND(COUNT(DISTINCT CASE WHEN day2-day1=3 THEN a.uid END)/COUNT(DISTINCT a.uid)*100,2),'%') AS 三日留存率,
CONCAT(ROUND(COUNT(DISTINCT CASE WHEN day2<
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java面试真题60道笔记是一本针对Java开发岗位的面试题集合。本书分为六个部分:基础知识与语法、面向对象、集合类、IO流与多线程、网络编程和数据库基础。每个部分都包括了该领域的常见问题和解答,以及一些实际场景中的应用题目。 在基础知识与语法部分,包括Java的数据类型、算术运算符、流程控制和异常处理等基本语法知识的问题。这些问题有助于检验应聘者对Java语言的熟悉程度。 面向对象部分则关注于类、对象、继承、多态和接口等面向对象的概念。这些问题旨在考察应聘者对面向对象编程的理解和实践经验。 集合类部分包括了常用的集合类容器,如List、Set和Map等,以及它们的特点和应用场景。这些问题可以考察应聘者对Java集合类的熟练掌握程度。 在IO流与多线程部分,问题主要涉及Java中的输入输出流和多线程编程。这些问题可以考察应聘者对Java的并发编程和IO操作的理解和应用能力。 网络编程部分主要涉及Java中的网络通信和Socket编程等知识。这些问题可以考察应聘者对网络编程的了解和实践经验。 最后,数据库基础部分主要涉及Java与数据库交互的知识,包括连接数据库、执行SQL语句和事务管理等内容。这些问题可以考察应聘者对数据库操作和数据持久化的了解和应用能力。 总之,Java面试真题60道笔记是一本综合性的Java面试题集,涵盖了基础知识、面向对象、集合类、IO流与多线程、网络编程和数据库基础等方面的内容,有助于应聘者在面试中更好地展示自己的技能和经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值