计算每个唯一值相对于另一列的数量(oracle g11)



嗨,我正在尝试使用看起来像这样的数据集执行以下操作:

letter  number
a   1
a   2
a   1
a   1
a   3
a   4
a   2
a   4
b   1
b   3
b   4
b   3
b   2
b   5
b   1
b   1

数据集是我运行的子查询的结果。我想将数据格式化为如下所示,以便我可以标记计数大于 3 的数据

letter number number_count
    a   1   3
    a   2   2
    a   3   1
    a   4   2
    b   1   3
    b   2   1
    b   3   2
    b   4   1
    b   5   1

因此,对于字母列中的每个值,我需要将 col 2 中的每个唯一数字计数并显示在值本身旁边。我已经做了很多搜索来尝试解决这个问题,但无法获得计数、计数非重复、过度或其他代码的任何变体来工作,所以我要么低估了问题,要么更有可能,我不确定如何措辞我的搜索,所以我找到了我正在寻找的答案。

任何帮助将不胜感激,我正在使用sql开发人员访问oracle 11g数据库。

所以我认为以下是你要找的:

select letter, number, count(letter) as number_count from table group by letter, number;

我又添加了两行数据来显示一个示例,其中您将有一个结果被标记。

 WITH
      sub_q AS (
           SELECT 'a' AS letter_column, 1 AS value_column FROM Dual UNION ALL
           SELECT 'a', 2 FROM Dual UNION ALL
           SELECT 'a', 1 FROM Dual UNION ALL
           SELECT 'a', 1 FROM Dual UNION ALL
           SELECT 'a', 3 FROM Dual UNION ALL
           SELECT 'a', 4 FROM Dual UNION ALL
           SELECT 'a', 2 FROM Dual UNION ALL
           SELECT 'a', 4 FROM Dual UNION ALL
           SELECT 'b', 1 FROM Dual UNION ALL
           SELECT 'b', 3 FROM Dual UNION ALL
           SELECT 'b', 4 FROM Dual UNION ALL
           SELECT 'b', 3 FROM Dual UNION ALL
           SELECT 'b', 2 FROM Dual UNION ALL
           SELECT 'b', 5 FROM Dual UNION ALL
           SELECT 'b', 1 FROM Dual UNION ALL
           SELECT 'b', 1 FROM Dual UNION ALL
           SELECT 'b', 1 FROM Dual UNION ALL
           SELECT 'b', 1 FROM DUal
      )
 SELECT
      letter_column,
      value_column,
      COUNT(value_column) AS value_count,
      CASE 
           WHEN COUNT(value_column) > 3 THEN 1
           ELSE NULL
      END AS flag_gt_3
 FROM sub_q
 GROUP BY
      letter_column,
      value_column
 ORDER BY
      letter_column,
      value_column
 ;

最新更新