找到最宽的列

时间:2012-03-27 05:40:37

标签: sql-server tsql

我正在为练习做一些练习,我坚持这个问题

编写查询以显示A1_AdventureWorks数据库中五个“最宽”表的列表。如果表有很多列,则表被认为是宽的。不要包含任何视图或系统表。

到目前为止我有这个,但我得到一些随机的答案

USE A1_AdventureWorks;
SELECT name 
 FROM sys.objects

我知道我必须使用类型功能,但不知道在哪里使用它 请协助

4 个答案:

答案 0 :(得分:2)

object_idsys.objects加入了select O.name from sys.objects as O inner join sys.columns as C on O.object_id = C.object_id

where O.type = 'U'

要仅获取用户表,您需要在O.name上进行过滤。

要计算每个表格的列数,您需要按count(*)进行分组,并将select top(5)添加到字段列表中。

要获得前5名,您应该使用order by count(*) desc,并且还需要添加schema_id

在SQL Server中,您可以在不同的架构中使用相同的表名,因此您还需要按{{1}}进行分组。

sys.columns

答案 1 :(得分:0)

mysql_list_tables获取数据库中的所有表 供参考 http://php.net/manual/en/function.mysql-list-tables.php

$result = mysql_query("SELECT * FROM `table`");
while ($row = mysql_fetch_row($result))
{
  foreach ($row as $item)
  $counter=++$i;
}

获取表中的行数

答案 2 :(得分:0)

存在同样的问题:Find the number of columns in a table

SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'database_name'
  AND table_name = 'tbl_name'

更新:你也可以使用sys.columns:

use yourDataBase
SELECT  COUNT(*)
FROM    sys.columns
WHERE   OBJECT_NAME(object_id) = 'table_name'

此分配的答案:在sqlserver中找到5个最宽的表查询:

use yourDataBase

select top 5 OBJECT_NAME(object_id)as name,count(*)as num_of_col from sys.columns 
where object_id in (select object_id from sys.tables)
group by object_id
order by num_of_col desc

答案 3 :(得分:0)

select  top 5 name
from    (select a.name,count(b.name) 'CNT'
        from    sysobjects a  , syscolumns b
        where   a.xtype =   'U' -- For considering only user tables -- no views or sys tables 
        and     a.id    =   b.id
        group by a.name) a 
order by CNT desc