【Oracle SQL】Oracle SQL 之七 SQL面试题比武招亲

收集網上看到碰到見過的形形色色的關於SQL的面試題或是實際工資中比較難一點的SQL應用

生气持續更新中.....

SQL

1、問----Table結構如下:

文章ID欄目ID機構ID
WEN_IDLAN_IDORG_ID
1a01
2a01_1
3b01_1_2
4c01
5a09
6a09_1
7b010_1
8c010
9c09_1_1
10a010_1_1
11a010_1
12a01
13b01_2

其中機構ID 01_、09_、010_都為相應01、09、010機構的子機構

請問如何獲得一下統計結果:獲得各個機構(包括子機構)在各個欄目下發佈的文章總數

格式如下:

欄目機構01機構09機構010
a322
b201
c111

解----

--首先按題目測試數據生成表數據 with temp_table as (select '1' wen_id, 'a' lan_id, '01' org_id from dual union all select '2' wen_id, 'a' lan_id, '01_1' org_id from dual union all select '3' wen_id, 'b' lan_id, '01_1_2' org_id from dual union all select '4' wen_id, 'c' lan_id, '01' org_id from dual union all select '5' wen_id, 'a' lan_id, '09' org_id from dual union all select '6' wen_id, 'a' lan_id, '09_1' org_id from dual union all select '7' wen_id, 'b' lan_id, '010_1' org_id from dual union all select '8' wen_id, 'c' lan_id, '010' org_id from dual union all select '9' wen_id, 'c' lan_id, '09_1_1' org_id from dual union all select '10' wen_id, 'a' lan_id, '010_1_1' org_id from dual union all select '11' wen_id, 'a' lan_id, '010_1' org_id from dual union all select '12' wen_id, 'a' lan_id, '01' org_id from dual union all select '13' wen_id, 'b' lan_id, '01_2' org_id from dual )--解法一:case select lan_id as "欄目", sum(case when substr(org_id,1,2)='01' and substr(org_id,1,3)!='010' then 1 else 0 end) as "機構01", sum(case when substr(org_id,1,2)='09' then 1 else 0 end) as "機構09", sum(case when substr(org_id,1,3)='010' then 1 else 0 end) as "機構010" from temp_table group by lan_id--解法二:利用oracle 11g的新特性PIVOT SELECT * FROM (SELECT lan_id as "欄目", replace(substr(org_id, 1, 3), '_', '') as p_orgid FROM temp_table) PIVOT(count(1) FOR p_orgid IN('01' as "機構01",'09' as "機構09",'010' as "機構010"))




PL/SQL & T-SQL

SQL基礎理論

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值