繁体   English   中英

SQL:计算每行的出现次数

[英]SQL: count occurrences for each row

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

代码:

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

项目:

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

输出:

代码:

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

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

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

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

如果代码都是三个字符,那么 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM