SQL:计算每一行的出现次数

时间:2019-03-21 13:04:04

标签: sql sqlite

我有一个名为Codes的SQL表,其主列code的类型为String。 我还有另一个名为Items的表,其中的列codestring也是String类型的。此项始终包含一个字符串,其中上表的某些代码用空格分隔。 现在我想获取所有代码及其包含相应代码的项目数。我可以这样做吗?

代码:

 code|...
 ----|---
"A0A"|
"A0B"|
  ...|

项目:

 ...|codestring
----|---------
    |"A0A C2B F1K"
    |"A0C D2S H3K"
    |...

输出:

代码:

 code|...|noOfItems
 ----|---|---------
"A0A"|...|5
"A0B"|...|10
  ...|...|...

2 个答案:

答案 0 :(得分:0)

假设所有代码都是不同的(或者至少没有代码是另一个代码的子字符串),则可以使用LIKE运算符: (未试用)

SELECT codes.code, count(*)
FROM codes LEFT JOIN items ON items.codestring LIKE '%' + codes.code + '%'
GROUP BY codes.code;

答案 1 :(得分:0)

您的数据格式太糟糕了,应该修复它。到代码的映射对于每个代码应该有一个单独的行。

如果代码都是三个字符,则L Scott Johnson的答案足够接近。否则,您应该考虑定界符:

SELECT c.code, count(i.codestring)
FROM codes c LEFT JOIN
     items i
     ON ' ' || i.codestring || ' ' LIKE '% ' || c.code || ' %'
GROUP BY c.code;

请注意该代码的其他修复程序:

  • 串联运算符是标准||
  • 如果没有匹配项,count()将返回0