用SQL语句统计一个表有多少列

1.oracle数据库
   select count( column_name )
   from user_tab_columns
   where table_name = '表名'; --表名为大写

2.sqlserver数据库
   select   count(syscolumns.name)
   from   syscolumns   ,   sysobjects    
   where   syscolumns.id   =   sysobjects.id  
   and   sysobjects.name   =   '表名'
在SQL中,通常没有直接的循环语句,如其他编程语言中的for或while循环。不过,可以使用一些数据库特有的方式来模拟循环处理,例如使用递归的公用表表达式(Common Table Expressions,CTEs)或存储过程中的循环结构。下面将给出一个使用递归CTE来模拟循环的示例,以便统计一个假设有63的数据表中每一的空置率。 首先,假定我们有一个名为`inventory`的数据表,它有63,我们想要统计每一的空置率。这里我们将用一个递归CTE来遍历每一,并计算其空值数量与总行数的比例。 请注意,不同的数据库管理系统(DBMS)在支持的SQL特性上可能有所不同。以下示例以支持递归CTE的数据库系统(如PostgreSQL, SQL Server等)为例: ```sql -- 假定inventory表有63,这里简化为3进行演示 WITH RECURSIVE cte AS ( SELECT 'Column1' AS column_name, SUM(CASE WHEN Column1 IS NULL THEN 1 ELSE 0 END) AS null_count, COUNT(*) AS total_rows FROM inventory UNION ALL SELECT CASE WHEN c.column_name = 'Column1' THEN 'Column2' WHEN c.column_name = 'Column2' THEN 'Column3' -- 继续出其余的名,直到第63 ELSE '' END, SUM(CASE WHEN Column2 IS NULL THEN 1 ELSE 0 END), COUNT(*) FROM cte c JOIN inventory i ON TRUE -- 这里需要添加剩余的名直到第63 ) SELECT column_name, round(null_count * 100.0 / total_rows, 2) AS vacancy_rate FROM cte; ``` 上述示例中,我们首先定义了一个递归的CTE。递归CTE由两部分组成:锚点(Anchor)和递归部分(Recursive)。锚点是递归的起点,这里我们计算了第一的空值数量和总行数。递归部分则是将递归CTE的输出作为下一次递归的输入,通过不断循环遍历每一。 最后,我们从递归CTE中选择名和空置率,并对空置率进行四舍五入处理到小数点后两位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值