Как использовать count, like и group by в одном запросе?
Мне нужно что-то вроде
SELECT sum(case when name LIKE 'nick-1%' then 1 end) as Count,
name
FROM dummytable
GROUP BY CASE
WHEN name LIKE 'nick-1%' THEN 'nick'
WHEN name LIKE 'vicky-1%' THEN 'vicky'
ELSE NULL
END
Name Count
nick 10
vicky 17
nick означает, что оно должно содержать имя как 'nick%' vicky означает, что оно должно содержать имя как 'vicky%'
В моем запросе я не могу просмотреть столбец имени, так как, используя сумму, он просит меня добавить его в группу по, но я не могу добавить его в группу, так как я использую для него функцию like
1 ответ
Решение
Чтобы решить проблему, вам нужно только повторить CASE
выражение, которое вы в настоящее время имеете в вашем GROUP BY
в вашем SELECT
также:
SELECT CASE WHEN name LIKE 'nick-1%' THEN 'nick'
WHEN name LIKE 'vicky-1%' THEN 'vicky'
ELSE NULL END AS Name,
COUNT(*) AS Count
FROM dummytable
GROUP BY CASE WHEN name LIKE 'nick-1%' THEN 'nick'
WHEN name LIKE 'vicky-1%' THEN 'vicky'
ELSE NULL END
В исходном запросе вы смешивали два типа агрегации. Если вы хотите использовать условное агрегирование по всей таблице, которую вы SELECT
пытался сделать, можно использовать следующий запрос:
SELECT 'nick' AS Name, SUM(CASE WHEN name LIKE 'nick-1%' THEN 1 ELSE 0 END) AS Count
FROM dummytable
UNION ALL
SELECT 'vicky', SUM(CASE WHEN name LIKE 'vicky-1%' THEN 1 ELSE 0 END)
FROM dummytable