拼接

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

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

原文地址:http://www.cnblogs.com/yych0745/p/16831562.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性