count函数怎么统计个数

Python 列表:my_list.count(2 ) 返回 2 出现的次数。
Python 字符串: my_string.count('l') 返回 'l' 出现的次数。
SQL 查询:SELECT COUNT() FROM table_name;返回表的行数。
JavaScript 数组: myArray.filter(x => x === someValue).length 计算给定值的数量。

 请问在sql 中,如何用charindex 函数计算A字符串在B字符串出现的次数

上周一位客户询问了数据库的情况。
他的 SQL 语句让我困惑。

Declare @string varchar(1 000)Set @string='a,b,c,d'select len(@string)-len(replace(@string,'&',''))
这个东西是统计逗号的个数吧? len(@string)统计逗号的总长度,replace(@string,'&','')去掉所有逗号,然后计算长度,差值就是逗号的个数。
但这里用了“&”而不是“,”,这显然是一个错字……我猜我的手在复制粘贴时滑倒了。

如果要统计逗号的个数,需要改为replace(@string,'','')。
但这个SQL的想法是正确的。
计算长度差是一个非常聪明的方法。
对于这个级别的客户,建议直接使用count()从split(@string,'')的结果中进行计数,简单明了。

SQL进阶--lead/lag窗口函数解决连续登录问题

嘿,我对你说的有点困惑,而且似乎这种情况一遍又一遍地发生。
你所说的查找连续得分N次的球员可以使用SQL窗口函数来完成,但我还没有完全弄清楚具体如何编写。

你说用 LEAD 和 LAG 将玩家名字移动 1 或 2 行然后比较它们,对吗?我想我理解这个想法。
现在看看这位球员的名字就知道了。
就像上面第一行和第二行他的名字一样不同。
如果相同,则他连续得分。

但是我没看到你的SQL是怎么写的。
它只是说你必须写它。
如何使用 LEAD(LAG('playername',1 )...) 进行附件?我没试过。
你说你需要先对它们进行分组,然后再对它们进行排序。
这是正确的顺序吗?如果玩家得分很多,将他们分组是否会使 LEAD/LAG 计算变得更加困难?我之前尝试过 LEAD,有时理解行偏移有点令人困惑,特别是当表很大时。

在您给出的学生成绩示例中,我认为我所做的就是使用 LAG 来查看之前和之后相同的成绩。
例如,要检查成绩单,请在成绩表中写入 SELECT 学号、成绩、LAG(grade,1 ) OVER (PARTITION BY 学号 ORDER BY time) 作为上一个成绩,LAG(grade,2 ) OVER (PARTITION BY 学号 ORDER BY 时间) 作为最后一个成绩 FROM thegrade table WHERE LAG(grade,1 ) =grade AND LAG(grade,2 ) =grade。
试试这个?但此条件使用 LAG(grade,1 ) = Grade AND LAG(grade,2 ) = Grade。
我应该改变它吗?应该是分数= LAG(分数,1 )和分数= LAG(分数,2 ),对吗?这意味着当前分数等于之前和最后一次的分数,即连续3 次相同。

说真的,我想我已经在其他地方看到过你提到的步骤和逻辑,但每次我自己写它们时我都会感到困惑。
我总是不确定,尤其是关于如何在窗口函数的 OVER 子句中使用 PARTITION BY 和 ORDER BY。
您确定在您提供的玩家评分示例中,可以直接使用 WHERE playername = LAG(playername, 1 ) AND playername = LAG(playername, 2 ) 过滤掉连续三个玩家吗?看来这样的写法可能有而梅开二度的球员……这个条件是不是更加困难?例如,如果当前行、上一行、前两行符合某个条件怎么办?
无论如何,你说的方向是对的。
使用 LEAD/LAG 查看之前和之后的值是否重复一致。
但具体的写法我有点不太清楚,尤其是过滤条件怎么写。
我自己还没有尝试过这部分。
你能告诉我 SQL 语句的具体编写方法吗?或者你能更简单地解释一下这个想法吗?