如何从一个非常大的表中获取每列的每个值的计数?

时间:2018-05-11 21:26:07

标签: sql sql-server

我有一个非常大的表,大约有2亿多条记录,有数百列。我想在每列中获取每个值的计数(大多数列包含2到15个不同的值),甚至可能按状态分解(表中有一个状态字段)。我知道如何获取值的计数,但我正在寻找最不可能完全杀死服务器的最有效方法。我在服务器上有其他数据库,我不想影响太多。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

你可以尝试这样做:

select col, val, count(*)
from t cross apply
     (values ('col1', col1), ('col2', col2), . . . ) v(col, val)
group by col, val
order by col, count(*) desc;

答案 1 :(得分:0)

由于您引用的大多数列可能未编入索引,因此任何查询运行都可能消耗相当多的资源。

我建议你尝试一下

select state,'colname',colname,count(*) as cnt 
from tablename
group by state,colname

' colname的'是一个静态名称,代表您要报告的列。

对您要处理的每个列重复此过程。