首页 > 数据库 >mysql面试题

mysql面试题

时间:2022-10-27 11:27:39浏览次数:55  
标签:面试题 DEFAULT mysql date table NULL daihao id

拼接

table_1:
1 a,b,c
2 a,b
table_2:
a 北京
b 上海
c 南京

输出
1 北京,上海,南京

CREATE TABLE `table_1` (
  `id` int DEFAULT NULL,
  `daihao` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

CREATE TABLE `table_2` (
  `daihao` varchar(100) DEFAULT NULL,
  `city` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

SELECT
	id,
	GROUP_CONCAT(city)
FROM
(
SELECT
    id,
    daihao,
    SUBSTRING_INDEX(SUBSTRING_INDEX(a1.daihao,',',a2.help_topic_id + 1),',' , -1) as fenjie
    FROM table_1 as a1
    INNER JOIN mysql.help_topic as a2
    on a2.help_topic_id < LENGTH(a1.daihao) - LENGTH(REPLACE(a1.daihao,',','')) + 1
) as tmp1
INNER JOIN table_2
on tmp1.fenjie = table_2.daihao
GROUP BY id

1	北京,上海,南京
2	北京,上海

解释一下:
首先使用mysql中一个自带的有递增的表,通过join将 a,b,c 变成
a,b,c 0
a,b,c 1
a,b,c 2
之后通过substring_index 对数据分割
substring_index 通过分隔符和值来确定取第几个分隔符之前的。
比如
1,就是 a
2,就是 a,b
再通过-1,取最后的,就将分割的数依次取了出来(没有分隔符就是取的原字符)
这样就变成了
a,b,c 0 a
a,b,c 0 b
a,b,c 0 c
再inner join 第二张表拿到city
通过group_concat()对字符进行拼接

table_1:
a 1
b 1
c 1
a 2
c 2
a 3
b 3

输出连续登陆天数

CREATE TABLE `user_profile` (
  `id` int NOT NULL,
  `install_date` date DEFAULT NULL,
  `active_date` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

SELECT 
	id,
	active_date - rank_ as diff,
	count(1) as a
FROM (
SELECT
	id,
	ROW_NUMBER() over(partition by id order by active_date) as rank_,
	active_date
from user_profile
) as t1
GROUP BY id, diff
having a >= 2

这题通过排序,如果是连续登陆,那么相减后的值是相同的,所以可以拿来作为判定条件。

标签:面试题,DEFAULT,mysql,date,table,NULL,daihao,id
From: https://www.cnblogs.com/yych0745/p/16831562.html

相关文章

  • 查看mysql binlog日志(转)
    1.使用showbinlogeventsa.获取binlog文件列表mysql>showbinarylogs;+------------------+-----------+|Log_name|File_size|+------------------......
  • Mysql 行号+分组行号+取Top记录 SQL
    Mysql行号+分组行号+取Top记录SQLselect*from(SELECT(@rowNum:=@rowNum+1)asrowNum--全量行号......
  • intellij IDEA+JAVA 做一个登陆界面,用到了mysql数据库
      今天打算学习一下IDEA+JAVA的框架搞点事情。网上发现个例子。发现有很多BUG。因为用到了mysql。还需要去装SQL安装包。以前有点经验。所以就弄了一下。首先下载MYSQL......
  • mysql视图/存储过程
    一.视图相关操作--注:对于单表查询的视图可以进行删除修改操作,多表查询的无法进行删除修改操作。一般视图多数用来做查询,不建议修改。--1.创建视图,语法格式CREATE......
  • 前端一面高频react面试题(持续更新中)
    如何避免组件的重新渲染?React中最常见的问题之一是组件不必要地重新渲染。React提供了两个方法,在这些情况下非常有用:React.memo():这可以防止不必要地重新渲染函数组......
  • mysqltext最大长度
    mysql数据库中text类型不设置大小默认大小事多少TINYBLOBTINYTEXT一个BLOB或TEXT列,最大长度为255(2^8-1)个字符。一个BLOB或TEXT列,最大长度为65535(2^16-1)个字符。MEDIUMBL......
  • mysqltext类型
    MYSQL里面,如果用NAVICAT设置NOTNULL?选择一个数据库,点击“查询”,在右侧点击“创建查询”,输入SQL语句,点击“执行”就可以了,示例SQL:CREATETABLE`test`.`users`(`id`int(10)N......
  • mysql共享表空间
    mysql数据库根目录存放那些文件如果是从rpm安装,应该在/var/lib/mysql目录下。或者:我的电脑---属性---高级---环境变量例:变量名:MYSQL_HOME变量值:D:\ProgramFiles\mysql-5.6.1......
  • mysql分组排序加序号
    mysql分组排序后取出几条记录,每一组你要显示几条数据?用groupbycc看看是你想要的吗?selectreason,floor(总数*0.8)from表明groupbyccorderbycc;你看我的截图mysql分组排序......
  • mysql创建存储过程
    mysql语句存储过程?MySQL教程4MySQL8运算符、函数、存储过程及新增数据类型17.之创建带有IN和OUT参数的存储过程学习猿地本回答由网友推荐mysql使用存储过程循环查找数据de......