2

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

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

table(diseasedata$severity) 

并查看一个快速表,每个严重性有多少行(行数)。

mild      20321
moderate  3512
severe    35135

一个没有权限编写自己的函数而只​​有普通 tsql 权限的用户,是否有一个类似于 table(column) 的智能 TSQL 命令来生成一个很好的列概览?

我正在寻找比 'select severity, count(*) from tbl group by severity' 更高级和更短的东西!

4

3 回答 3

1

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

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

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

于 2013-02-05T19:07:37.603 回答
0

抱歉批评,但如果“更高级”的意思是“更复杂”,为什么你想要更复杂的代码 - 让你得到相同的答案(作为一个群体)?我确定不是这样。

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

于 2013-02-05T19:06:25.787 回答
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)
于 2013-02-06T07:04:51.353 回答