簡體   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