#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