Подсчет строк столбца, в котором значение другого столбца равно 1

Я использую select count distinct для подсчета количества записей в столбце. Однако я хочу подсчитывать только те записи, в которых значение другого столбца равно 1.

Итак, моя таблица выглядит примерно так:

Имя ------ Тип
abc --------- 1
def ---------- 2
ghi-- -------- 2
jkl ----------- 1
mno -------- 1

и я хочу, чтобы запрос подсчитывал только abc, jkl и mno и, таким образом, возвращал «3».

Я не смог сделать это с помощью функции CASE, потому что, похоже, она работает только с условиями в том же столбце.

РЕДАКТИРОВАТЬ: Извините, я должен был добавить, я хочу сделать запрос, который учитывает оба типа. Результат должен выглядеть примерно так: 1 --- 3 2 --- 2


person Sander    schedule 15.08.2011    source источник


Ответы (4)


SELECT COUNT(*) 
  FROM dbo.[table name] 
  WHERE [type] = 1;

Если вы хотите вернуть количество по типу:

SELECT [type], COUNT(*)
  FROM dbo.[table name]
  GROUP BY [type]
  ORDER BY [type];

Вам следует избегать использования таких ключевых слов, как тип, в качестве имен столбцов - вы можете избежать множества квадратных скобок, если используете более конкретное, незарезервированное слово.

person Aaron Bertrand    schedule 15.08.2011

Я думаю, вы захотите (при условии, что вы не захотите считать ('abc', 1) дважды, если он дважды находится в вашей таблице):

select count(distinct name) 
  from mytable
 where type = 1

РЕДАКТИРОВАТЬ: для получения всех типов

select type, count(distinct name)
  from mytable
 group by type
 order by type
person beny23    schedule 15.08.2011
comment
Спасибо за быстрый ответ, но я забыл упомянуть, что хочу сделать запрос, учитывающий оба типа. Результат должен выглядеть примерно так: 1 --- 3 2 --- 2 - person Sander; 15.08.2011

выберите count (1) из таблицы, где type = 1

person Patrick    schedule 15.08.2011

person    schedule
comment
небольшой совет: добавьте точку с запятой перед СО :) - person sll; 15.08.2011