如何快速调查表列(不同值的计数)

时间:2013-02-05 18:51:17

标签: sql-server r

高级用户经常使用SQL和其他语言(例如R)。 在探索表格(例如,有疾病数据)时,可能会有一个列严重性,其值为Mild,Moderate,Severe。

在许多语言(例如R)中,用户可以编写

table(diseasedata$severity) 

并查看快速表中每种严重性的行数(行数)。

mild      20321
moderate  3512
severe    35135

没有权限编写自己的函数和普通tsql权限的用户是否有类似于表(列)的智能TSQL命令来生成列的精彩概述?

我正在寻找更高级和更短的东西,比严格'选择严重性,从tbl组计数(*)!

3 个答案:

答案 0 :(得分:1)

没有创建自己的函数/视图......那么不,这就像开箱即用的Sql一样简洁:

select severity, count(*) from tbl group by severity

也许我只是习惯了Sql,但这对我来说似乎很短暂和甜蜜......

答案 1 :(得分:0)

对不起,但如果“更高级”意味着“更复杂”,为什么你想要更复杂的代码 - 给你相同的答案(作为一组)?我确定不是。

假设您的意思是您只需要近似分布,并且在非常大的数据集列(即> =数十亿行)上没有任何好的索引。我使用的另一种方法是尝试使用命令DBCC SHOW_STATISTICS(http://msdn.microsoft.com/en-us/library/ms174384.aspx)在该表上查找一些列统计信息。如果幸运的话,这可以非常快,在几毫秒内返回超过100,000,000,000行的分布。但是,它们只是近似的,可以是过时的,或者如果你不幸的话 - 根本不存在。

答案 2 :(得分:0)

您可以将代码段与一些动态SQL一起使用,您只需更改几个变量的分配即可查询不同的表和不同的字段。

declare @TableName sysname = 'diseasedata'
declare @FieldName sysname = 'severity'

declare @SQL nvarchar(max)
set @SQL = 'select '+quotename(@FieldName)+', count(*) as C
            from '+quotename(@TableName)+'
            group by '+quotename(@FieldName)
exec (@SQL)