SQL:计算每行的出现次数

SQL:计算每行的出现次数,sql,sqlite,Sql,Sqlite,我有一个名为Codes的SQL表,其主列代码为String类型。 我还有另一个名为Items的表,它的列codestring也是String类型。此条目始终包含一个字符串,上面表格中的一些代码用空格分隔。 现在我想得到所有代码以及它们包含相应代码的项数。我可以这样做吗 代码: code|... ----|--- "A0A"| "A0B"| ...| code|...|noOfItems ----|---|--------- "A0A"|...|5 "A0B"|...|10 ..

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

代码:

 code|...
 ----|---
"A0A"|
"A0B"|
  ...|
 code|...|noOfItems
 ----|---|---------
"A0A"|...|5
"A0B"|...|10
  ...|...|...
项目:

 ...|codestring
----|---------
    |"A0A C2B F1K"
    |"A0C D2S H3K"
    |...
输出:

代码:

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

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


你有一个可怕的数据格式,应该修复它。到代码的映射对于每个代码都应该有一个单独的行

如果代码都是三个字符,那么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;
请注意代码的其他修复程序:

串联运算符是标准的| |。 如果没有匹配项,计数将返回0。
示例数据和预期输出更受欢迎。此外,您使用的是什么SQL方言;SQL Server、Oracle、MySql、Postgress等…?SQLite for Swift不将数据存储为逗号分隔的项。这只会给您带来很多麻烦。在将行插入items表时,请拆分该列表,以便每个元素都有自己的行。在缺少数组类型的数据库中,唯一正确的方法是。在第二列中始终返回1,然后用items.codesting替换count*,并删除GROUP BY,然后查看得到的结果。或者更好:尝试将ON子句移动到WHERE子句