Как использовать 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
Другие вопросы по тегам