2025年4月3日 星期四 乙巳(蛇)年 正月初四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 软件应用 > 数据库 > 其它数据库

SQL 找出字符串中连续值的最大个数

时间:06-11来源:作者:点击数:45

需求:现有一个逗号分隔的,由0和1 组成的字符串,要从这个字符串中找到0连续出现的最大次数。

要求:用SQL实现

字符串示例:‘0,1,0,0,1,1,0,0,0,0,0,1,0,0,1’

解题思路:

  1. 求字符串中0连续出现的最大次数,也就是求0组成的字符串的最大长度,能想到这一点问题就解决一半了。
  2. 如何找到包含0的字符串?
    因为这个字符串中只有0,1,逗号。把逗号去除掉后,在按1进行分割,就能找到包含0的字符串。
  3. 求出每个包含0的字符串的长度
  4. 求包含0的字符串长度的最大值
  • -- 在ClickHouse中的实现方式如下:
  • SELECT replace('0,1,0,0,1,1,0,0,0,0,0,1,0,0,1', ',', '') AS a1
  • ┌─a1──────────────┐
  • 010011000001001
  • └─────────────────┘
  • SELECT splitByString('1', replace('0,1,0,0,1,1,0,0,0,0,0,1,0,0,1', ',', '')) AS a2
  • ┌─a2────────────────────────────┐
  • │ ['0','00','','00000','00',''] │
  • └───────────────────────────────┘
  • SELECT arrayJoin(splitByString('1', replace('0,1,0,0,1,1,0,0,0,0,0,1,0,0,1', ',', ''))) AS a3
  • ┌─a3────┐
  • 0
  • 00
  • │ │
  • 00000
  • 00
  • │ │
  • └───────┘
  • SELECT LENGTH(arrayJoin(splitByString('1', replace('0,1,0,0,1,1,0,0,0,0,0,1,0,0,1', ',', '')))) AS a4
  • ┌─a4─┐
  • 1
  • 2
  • 0
  • 5
  • 2
  • 0
  • └────┘
  • SELECT max(LENGTH(arrayJoin(splitByString('1', replace('0,1,0,0,1,1,0,0,0,0,0,1,0,0,1', ',', ''))))) AS max_len_0
  • ┌─max_len_0─┐
  • 5
  • └───────────┘

最近有个朋友经常提到他思考问题的方式。不断的迭代,需求最优解。顺着他的这个思路,尝试了另一种实现方式。

在此一并奉献出来。

感谢NYJ。

  • SELECT arrayMax(arrayMap(x -> LENGTH(x), splitByString('1', replace('0,1,0,0,1,1,0,0,0,0,0,1,0,0,1', ',', '')))) AS max_len_0
  • ┌─max_len_0─┐
  • 5
  • └───────────┘
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门