SQL COUNT所有列中的行



我需要计算所有行并将其写入ORACLE SQL中的列。它看起来应该是这样的(左边的,右边的):

|A|B|C|D|      |A|COUNT_A|B|COUNT_B|C|COUNT_C|D|COUNT_D|
- - - -        - ------- - ------- - ------- - -------
|1|2|3| |  ==> |1|   2   |2|   3   |3|   3   | |   0   |
|1|3|4| |  ==> |1|   2   |3|   3   |4|   3   | |   0   |
| |3|4| |      | |   2   |3|   3   |4|   3   | |   0   |

我尝试过COUNT(*) OVER (PARTITION BY), UNION等等

提前谢谢你。

您可以使用窗口函数:

select a, count(a) over () as cnt_a,
b, count(b) over () as cnt_b,
c, count(c) over () as cnt_c,
d, count(d) over () as cnt_d
from t;

可以通过聚合查询和交叉连接来实现。如果你有大量的数据,将其与Gordon Linoff的答案中所示的分析函数方法进行比较将会很有趣;聚合方法从基表读取数据两次(这将花费更多的时间),但是聚合函数的计算速度比分析函数快得多,即使它们做同样的事情。

像这样:

select a, cnt_a, b, cnt_b, c, cnt_c, d, cnt_d
from   t cross join
( select count(a) cnt_a, count(b) cnt_b, count(c) cnt_c, count(d) cnt_d
from   t
)
;

相关内容

  • 没有找到相关文章

最新更新