SQL用于查找列中不同值的数量

时间:2008-09-26 19:52:49

标签: sql distinct

我可以通过以下方式选择列中的所有不同值:

  • SELECT DISTINCT column_name FROM table_name;
  • SELECT column_name FROM table_name GROUP BY column_name;

但是如何从该查询中获取行数呢?是否需要子查询?

12 个答案:

答案 0 :(得分:560)

您可以在COUNT聚合函数中使用DISTINCT关键字:

SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name

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

答案 1 :(得分:149)

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

select distinct columnName, count(columnName) as CountOf from tableName group by columnName

答案 2 :(得分:25)

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

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

答案 3 :(得分:13)

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

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

答案 4 :(得分:11)

SELECT COUNT(DISTINCT column_name) FROM table as column_name_count;

你必须计算那个不同的col,然后给它一个别名。

答案 5 :(得分:11)

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

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

答案 6 :(得分:5)

select Count(distinct columnName) as columnNameCount from tableName 

答案 7 :(得分:0)

**

  

使用以下SQL,我们可以在其中获取与众不同的列值计数   Oracle 11g。

**

Select count(distinct(Column_Name)) from TableName

答案 8 :(得分:0)

select count(distinct(column_name)) AS columndatacount from table_name where somecondition=true

您可以使用此查询来计数不同/不同的数据。 谢谢

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

要在 Presto using OVER 中执行此操作:

SELECT DISTINCT my_col,
                count(*) OVER (PARTITION BY my_col
                               ORDER BY my_col) AS num_rows
FROM my_tbl

使用这种基于 OVER 的方法当然是可选的。在上面的 SQL 中,我发现指定 DISTINCTORDER BY 是必要的。

注意:根据 docs,使用 GROUP BY 可能更有效。

答案 11 :(得分:-7)

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

Simply Count({fieldname})为您提供该表中的所有不同值。它不会(尽可能多的假设)只给你表的计数[即与表格中的Count(*)不同