Counting the rows of a column where the value of a different column is 1

二次信任 提交于 2019-12-11 02:29:41

问题


I am using a select count distinct to count the number of records in a column. However, I only want to count the records where the value of a different column is 1.

So my table looks a bit like this:

Name------Type
abc---------1
def----------2
ghi----------2
jkl-----------1
mno--------1

and I want the query only to count abc, jkl and mno and thus return '3'.

I wasn't able to do this with the CASE function, because this only seems to work with conditions in the same column.

EDIT: Sorry, I should have added, I want to make a query that counts both types. So the result should look more like: 1---3 2---2


回答1:


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

If you want to return the counts by type:

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

You should avoid using keywords like type as column names - you can avoid a lot of square brackets if you use a more specific, non-reserved word.




回答2:


I think you'll want (assuming that you wouldn't want to count ('abc',1) twice if it is in your table twice):

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

EDIT: for getting all types

select type, count(distinct name)
  from mytable
 group by type
 order by type



回答3:


select count(1) from tbl where type = 1




回答4:


;WITH MyTable (Name, [Type]) AS
(
SELECT 'abc', 1
UNION
SELECT 'def', 2
UNION
SELECT 'ghi', 2
UNION
SELECT 'jkl', 1
UNION
SELECT 'mno', 1
) 
SELECT COUNT( DISTINCT Name)
FROM MyTable
WHERE [Type] = 1


来源:https://stackoverflow.com/questions/7065814/counting-the-rows-of-a-column-where-the-value-of-a-different-column-is-1

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!