我有一个由数千行和十多列组成的扁平表。我想对每行的每一列(非null)进行计数。例如,这里我有一个扁平表,即table A
:
+=====+======+======+======+=====+======+
| Aid | col1 | col2 | col3 | ... |col10 |
+=====+======+======+======+=====+======+
| 1 | a | b | c | ... | x |
+-----+------+------+------+-----+------+
| 2 | a | b | c | ... | x |
+-----+------+------+------+-----+------+
| 3 | a | b | c | ... | x |
+-----+------+------+------+-----+------+
现在,我希望对单个查询中所有辅助的所有列(非null)进行计数。例如,如果我将count作为col1,那么我需要使用select count(*) from A where col1 is not null;
,但是我希望在单个查询中为每个Aid表使用所有列count(非NULL值)。我怎么能这么做呢?
发布于 2013-06-24 09:11:47
根据COUNT function documentation的说法
如果指定expr,则COUNT返回expr不为null的行数。
因此,您可以使用:
select aid, count(col1), count(col2), count(col3)
from t
group by aid
发布于 2013-06-24 10:54:53
考虑以下查询
select count(a), count(b), count(c)....
from table_name
或
select count(distinct a), count(distinct b), count(distinct c), ...
from table_name
如果您想计算不同的值
发布于 2013-06-24 11:52:54
Marco的答案是完美的。如果您的表很大,并且计数近似值还可以,那么您不妨查看一下数据字典。每次您(或您的数据库管理员)调用DBMS_STATS.GATHER_TABLE_STATS时,它都会收集这些计数并将它们存储在一个视图中:
SELECT column_name, num_nulls
FROM user_tab_columns
WHERE table_name='A';
https://stackoverflow.com/questions/17271640
复制相似问题