简体   繁体   English

oracle sql组数

[英]oracle sql group count

SELECT a,b,count(*)
FROM t
GROUP BY rollup(a,b)

result: 结果:

a1, b1, 10
a1, b2, 90
a1,   , 100

i need: 我需要:

a1, b1, 10, 100
a1, b2, 90, 100

how? 怎么样?

This table simulates your situation: 该表模拟了您的情况:

SQL> create table t (a,b)
  2  as
  3   select 'a1', 'b1'
  4     from dual
  5  connect by level <= 10
  6    union all
  7   select 'a1', 'b2'
  8     from dual
  9  connect by level <= 90
 10  /

Table created.

Your result with only three rows misses the grand total, so that's a little inaccurate: rollup(a,b) results in 3 grouping sets with 4 rows. 您只有三行的结果会漏掉总计,因此有点不准确:rollup(a,b)导致3行分组的集合包含4行。

SQL> select a
  2       , b
  3       , count(*)
  4    from t
  5   group by rollup(a,b)
  6  /

A  B    COUNT(*)
-- -- ----------
a1 b1         10
a1 b2         90
a1           100
             100

4 rows selected.

With a regular group by and an analytic function on top, you can achieve your desired result set: 使用常规分组依据和顶部的分析功能,您可以实现所需的结果集:

SQL> select a
  2       , b
  3       , count(*)
  4       , sum(count(*)) over (partition by a)
  5    from t
  6   group by a
  7       , b
  8  /

A  B    COUNT(*) SUM(COUNT(*))OVER(PARTITIONBYA)
-- -- ---------- -------------------------------
a1 b2         90                             100
a1 b1         10                             100

2 rows selected.

Regards, Rob. 问候,罗布。

Use: 采用:

  SELECT t.a,
         t.b,
         COUNT(*),
         (SELECT COUNT(*)
            FROM YOUR_TABLE
        GROUP BY t.a) 
    FROM YOUR_TABLE t
GROUP BY t.a, t.b

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM