计算 Oracle 中的记录值

Counting record values in Oracle

首先,由于英语不好,请接受我的道歉。我也是这个门户网站的新手。我希望你能帮助我解决我的问题。

我有两个关于 Oracle 的问题。

  1. 如何在 table.
  2. 的每一列中查找“*”的数量
  3. 如何在table.
  4. 中找到'*'的总数

在此先感谢您抽出宝贵的时间来回答我的问题!

C1  C2  C3
*   1   1
0   0   *
1   *   *
*   *   *
select sum(
case when c1='*' then 1
else 0 end) c1_cnt,
sum(
case when c2='*' then 1
else 0 end) c2_cnt,
sum(
case when c3='*' then 1
else 0 end) c3_cnt,
sum(
regexp_count(c1||c2||c3,'\*')) cnt_total_stars
from cnt_star;
C1_CNT C2_CNT C3_CNT CNT_TOTAL_STARS
2 2 3 7

为原table-

select * from cnt_star;
C1 C2 C3
* 1 1
0 0 *
1 * *
* * *

使用条件聚合计算每列中的星星,对于总星星只需添加之前的总数:

SELECT COUNT(CASE c1 WHEN '*' THEN 1 END) AS c1_stars,
       COUNT(CASE c2 WHEN '*' THEN 1 END) AS c2_stars,
       COUNT(CASE c3 WHEN '*' THEN 1 END) AS c3_stars,
       COUNT(CASE c1 WHEN '*' THEN 1 END)
       + COUNT(CASE c2 WHEN '*' THEN 1 END)
       + COUNT(CASE c3 WHEN '*' THEN 1 END) AS total_stars
FROM   table_name