SQL: подсчет вхождений для каждой строки - PullRequest
0 голосов
/ 21 марта 2019

У меня есть таблица SQL с именем Codes с основным столбцом code типа String. У меня также есть другая таблица с именем Items со столбцом codestring также типа String. Эта запись всегда содержит строку с некоторыми кодами из таблицы выше, разделенными пробелами. Теперь я хочу получить все коды и их количество предметов, содержащих соответствующий код. Могу ли я это сделать?

Коды:

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

Детали:

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

Выход:

Коды:

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

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

У вас ужасный формат данных, и вы должны это исправить. Отображение кодов должно иметь отдельную строку для каждого кода.

Если все коды состоят из трех символов, то ответ Л. Скотта Джонсона достаточно близок. В противном случае вы должны принять во внимание разделитель:

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, если совпадений нет.
0 голосов
/ 21 марта 2019

Предполагая, что все коды различны (или, по крайней мере, ни один код не является подстрокой другого кода), вы можете использовать оператор LIKE: (не проверено)

SELECT codes.code, count(*)
FROM codes LEFT JOIN items ON items.codestring LIKE '%' + codes.code + '%'
GROUP BY codes.code;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...