ClickHouse 分组取每组第一条记录,为什么别用 any?
刚上手 ClickHouse 那阵,我被分组查询坑得不轻。
写惯了 MySQL 的 GROUP_CONCAT 和 GROUP BY 后随手取列,到了 ClickHouse 全报错。
这篇把我趟过的几个坑整理一下,重点说清楚「分组后怎么正确取每组第一条记录」。
刚上手 ClickHouse 那阵,我被分组查询坑得不轻。
写惯了 MySQL 的 GROUP_CONCAT 和 GROUP BY 后随手取列,到了 ClickHouse 全报错。
这篇把我趟过的几个坑整理一下,重点说清楚「分组后怎么正确取每组第一条记录」。
很多人从小在农村长大,可能都有过这样的疑惑:家里的化粪池好像从来没有人来抽过粪,也没见过什么吸粪车,但它就是能年复一年地用下去,既没有臭气熏天,也没有粪便溢出来。这到底是怎么回事? 是化粪池有什么神奇的魔法,还是我们忽略了什么?
ClickHouse 查询快,但删除和更新一直是它的软肋。
VersionedCollapsingMergeTree 是官方给出的一个折中方案:不真删数据,而是再插一条「抵消行」,让后台合并时把新旧记录成对消掉。
我之前在一个用户状态表上踩过它的坑,SELECT * 出来的数据对不上,折腾了挺久才搞明白它的脾气。
在 M1 的 Mac 上装 ClickHouse,最容易踩的坑是镜像架构对不上。
很多老教程还在用 yandex/clickhouse-server 这个镜像名,它早就改名了,而且不一定有 arm64 版本。
下面给两条路:图省事用 Docker,想要原生性能就用官方二进制。
求一组字符串的最长公共前缀,是 LeetCode 第 14 题。
题目很短:给你一个字符串数组,找出它们共有的最长前缀;没有就返回空字符串。
我第一次做的时候随手写了个横向扫描,过了,但总觉得不踏实。
给你一个字符串 s,要找出里面最长的那段回文子串。
这就是 LeetCode 第 5 题,面试里出现频率很高。
先说清楚两个容易混的概念。
子串是连续的,子序列可以不连续,这题要的是连续子串。