Как выполнить SQL-запрос, который учитывает слово, которое появляется в столбце string с помощью join и group by?

#sql

#sql

Вопрос:

Я хочу подсчитать, сколько раз слово «завершено» встречается в столбце info. Но проблема в том, что я хочу поместить его в group by и join . Вот пример таблиц:

Таблица заданий

Группы группируют таблицу

Я хочу что-то вроде этого: таблица результатов

Я думал о таком запросе:

Select j.Name, gName From Jobs as j Inner join groups as g On j.groupID = g.groupID Group by g.Name, j.name'

Итак, как я могу подсчитать, сколько раз «завершено» происходит для каждой строки моих результатов?

Комментарии:

1. Пожалуйста, пометьте ваши СУБД: SQL Server, Oracle, Postgres и т.д.

Ответ №1:

Просто добавьте условный SUM агрегат, который суммирует флаги true или 1, аналогично условному количеству. Ниже приведены альтернативные выражения:

  • Использование LIKE столбца if является открытым и требует поиска по строке.
  • Использование = столбца if ограничено согласованными значениями, как предполагает изображение. Обратите внимание: равенство = более эффективно, чем LIKE .
  • Используется CASE для тех СУБД, которые не поддерживают прямое SUM включение логического условия, такого как SQL Server.
 SELECT gName AS groupName
     , j.Name AS jobName
     , SUM(j.info LIKE '%completed%') AS NumberOfCompleted1
     , SUM(j.info = 'Is completed') AS NumberOfCompleted2
     , SUM(CASE 
              WHEN j.info = 'Is completed'
              THEN 1
              ELSE 0
           END) AS NumberOfCompleted3

FROM Jobs AS j 
INNER JOIN groups AS g 
   ON j.groupID = g.groupID 

GROUP BY g.Name
       , j.name