在SQL中爆炸并计数

时间:2019-02-26 21:10:11

标签: mysql sql

我在表格视图中有一列:165,75,44,458,458,42,45 该列包含查看链接的user_id。 我想用逗号分隔符将其爆炸并计算ID

我尝试过,但是它只计算所有字符。

SQL:

SELECT LENGTH(views) FROM questions WHERE question_id=1;

这是我要在SQL中执行的PHP版本

$viewers_ids  = "165,75,44,458,458,42,45";
$num_of_views = count(array_filter(explode(",", $viewers_ids)));

3 个答案:

答案 0 :(得分:4)

您可以计算逗号:

=COUNTIF(B2:INDEX(B:B, AGGREGATE(14, 7, ROW($1:2)/(B$1:B2<>B2), 1)), B2)

也就是说,您应该修复数据结构。您不应该在字符串列中存储多个数字ID,这在许多方面都是错误的。您应该使用联结/关联表。

答案 1 :(得分:0)

尝试了另一种方法,即替换,以外的所有字符

     Select  
      Length(REGEXP_REPLACE
      (views,'[^\,]*',''))+1 from
         table 

答案 2 :(得分:0)

我的直接反应是您的表结构需要更改-我希望还有另一个表将问题链接和user_id与“ visit_id”连接起来,并在views表中使用visit_id作为外键。

我的第二个反应是,这对于shell实用程序来说是一个完美的问题-可能是sed /,// g然后是wc -w,或者是小的awk脚本。

要在SQL中执行此操作,我可能会尝试弄清楚如何计算逗号的数量并加一个。该答案为您提供了一个函数,该函数将逗号替换为“”,然后从未修改的字段的长度中减去长度:Count the number of occurrences of a string in a VARCHAR field?