【问题标题】:Get user count from one row - Oracle SQL从一行获取用户数 - Oracle SQL
【发布时间】:2021-10-14 01:20:49
【问题描述】:
Create table test4(
    id number,
    user_1 varchar2(100),
    user_2 varchar2(100),
    user_3 varchar2(100),
    user_4 varchar2(100)
    )
    
    Insert into test4(id,user_1,user_2,user_3,user_4) values (1,'MARK','CLARC','KING','KING');

如何得到结果:

user        total
---------------------
MARC        1
CLARC       1
KING        2

【问题讨论】:

  • 这是作业吗?您正在寻找 GROUP BY 和 COUNT。
  • 我会考虑一个用户列和几行。
  • 就像现在一样,您必须先 UNION ALL 用户列,然后 GROUP BY 结果。

标签: sql oracle group-by


【解决方案1】:

可能是这样的:

select user, count(*) from (
    select user_1 as user from test4 union all 
    select user_2 as user from test4 union all 
    select user_3 as user from test4 union all 
    select user_4 as user from test4
) t 
group by user

【讨论】:

    【解决方案2】:

    使用UNPIVOT(只需要一次表扫描):

    SELECT name,
           COUNT(*)
    FROM   test4
    UNPIVOT (name FOR key IN (user_1, user_2, user_3, user_4))
    GROUP BY name
    

    输出:

    NAME COUNT(*)
    KING 2
    MARK 1
    CLARC 1

    db小提琴here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      • 2016-09-16
      • 1970-01-01
      • 1970-01-01
      • 2013-07-30
      • 1970-01-01
      相关资源
      最近更新 更多