Подсчитывать сгруппированные результаты

#sql-server

#sql-сервер

Вопрос:

Привет, мне нужно подсчитать, сколько результатов содержит столбцы b, например:

Я создал этот запрос, чтобы объяснить свою проблему:

   Declare @t as Table(a varchar(50), b varchar(50))
  Insert into @t (a,b) values ('UNO', 'LOBO');
  Insert into @t (a,b) values ('DOS', 'LOBO');
  Insert into @t (a,b) values ('UNO', 'PERRO');
  Insert into @t (a,b) values ('DOS', 'PERRO');
  Insert into @t (a,b) values ('UNO', 'GATO');
  Insert into @t (a,b) values ('UNO', 'POLLO');
  Insert into @t (a,b) values ('UNO', 'PATO');
  Insert into @t (a,b) values ('UNO', 'PATO');
  Insert into @t (a,b) values ('UNO', 'PATO');
  Insert into @t (a,b) values ('UNO', 'PATO');

    select b,a from @t  group by b,a

   The grouped que results:
   b            a
   ------------ -----------------
   GATO         UNO
   LOBO         DOS
   LOBO         UNO
   PATO         UNO
   PERRO        DOS
   PERRO        UNO
   POLLO        UNO
  

Итак, я хочу подсчитать, сколько a имеет b, например, у LOBO есть два результата, или у perro есть два результата после группировки.

Ответ №1:

Вы хотите посчитать distinct значения a , верно?
Тогда group by b только:

 select b,count(distinct a) counter from @t  group by b
  

Смотрите демонстрацию.
Результаты:

 b     | counter
:---- | ------:
GATO  |       1
LOBO  |       2
PATO  |       1
PERRO |       2
POLLO |       1
  

Если вы хотите также подсчитать дубликаты, то:

 select b,count(a) counter from @t  group by b