SQL查找列中不同值的数量


Answers:


612

您可以DISTINCTCOUNT聚合函数中使用关键字:

SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name

这将仅计算该列的不同值。


6
整洁,我不知道您可以在其中放一个与众不同的关键字。
Christian Oudard

12
也适用于团体select A,COUNT(DISTINCT B) from table group by A
tmanthey 2013年

5
您可以扩展此示例以使其在多个列上有所区别吗?
尤金2015年

11年后,这仍然有用
wundermahn

175

这将同时为您提供不同的列值和每个值的计数。我通常会发现我想知道这两个信息。

SELECT [columnName], count([columnName]) AS CountOf
FROM [tableName]
GROUP BY [columnName]

59
由于您按进行分组columnName,因此您已经只获得了一次不同的值,并且distinct关键字在这里没有任何作用。尝试不带查询的查询,结果集完全相同。
Antti29年

26

请注意,Count()会忽略null值,因此,如果需要允许null作为其自己的不同值,则可以执行一些棘手的操作,例如:

select count(distinct my_col)
       + count(distinct Case when my_col is null then 1 else null end)
from my_table
/

我真的认为您的案件陈述是要说:case when my_col is null then 1 else my_col end
James Jensen

为了清楚起见:SELECT my_col, COUNT(my_col) + COUNT(CASE WHEN my_col IS NULL THEN 1 ELSE NULL END) as CountOf from my_Table GROUP BY my_col
Michael Paulukonis

count(*)包含空值
PragmaticProgrammer

1
@PragmaticProgrammer我想是的,但是没有空行,只有空值,count(*)特别是行数。
David Aldridge

20

列名唯一值的sql总和,并按频率排序:

SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name ORDER BY 2 DESC;

1
肯定是最好的答案IMO
Briford卫理

13
select count(*) from 
(
SELECT distinct column1,column2,column3,column4 FROM abcd
) T

这将给出不同组列的计数。


11
SELECT COUNT(DISTINCT column_name) FROM table as column_name_count;

您必须计算出该单独的col,然后为其命名。


5
select Count(distinct columnName) as columnNameCount from tableName 

0

**

使用以下SQL,我们可以在Oracle 11g中获得不同的列值计数

**

Select count(distinct(Column_Name)) from TableName


0

在MS SQL Server 2012之后,您也可以使用窗口功能。

   SELECT column_name, 
   COUNT(column_name) OVER (Partition by column_name) 
   FROM table_name group by column_name ; 

-8

Count(distinct({fieldname}))是多余的

只需Count({fieldname})即可为您提供该表中的所有不同值。它不会(假设很多)只是为您提供表的Count [即与表中的Count(*)不同)


2
不,这是正确的。count(field)返回,其中行数fieldnot null
Antti29年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.