2017-01-19 3 views
1

мне нужно что-то вродеКак использовать 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 

ник означает, что он должен содержать название, как «нику%» Vicky означает, что он должен содержать название, как «Vicky%»

В моем запросе я не могу в состоянии просмотрите столбец имени, так как я использую сумму, прошу меня добавить его в группу, но я не могу добавить его в группу, поскольку я использую для этого как функцию.

+0

В моем запросе я не могу иметь возможность просматривать столбец имен, так как используя сумму это спросить меня добавить его в группу, но я не могу добавить его в группу, так как я использую для него как функцию – Nick

+1

. Ваш запрос не имеет для меня полного смысла. Можете ли вы показать нам образцы данных из 'dummytable' и ожидаемого результата. –

ответ

0

Для решения возникшей проблемы вам нужно только повторить тот же 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 
+0

Спасибо, что решает проблему ma – Nick