SQL每日一题(20200506)

引自:https://mp.weixin.qq.com/s?__biz=MzA3MTg4NjY4Mw==&mid=2457305320&idx=4&sn=69fd3fd9b6e82dc7ff005e6aa1f15f28&chksm=88a592dcbfd21bca2bf3af61bbb47c826f452f1b0e6348d601c31ab7001317468f6cdffa038c&mpshare=1&scene=1&srcid=0506nyywpSC3YSk2Dz72vajO&sharer_sharetime=1589171863129&sharer_shareid=18c156b37f741bf9989098e28bf33e09&exportkey=AWpxElWQlYB%2FjTnOUT%2B46Xs%3D&pass_ticket=EaKGZRHKbzM1AWLInB3Xw8OJVX03qU6GT2kQqMa0w7Jb5GuAKgVNkQzLi5RYKfTa#rd

感谢出题者,如有冒犯,请与我联系,希望和大家一起学习交流。(目前使用oracle数据库环境编写sql)

 

题目

有如下一张表T,

SQL每日一题(20200506)

想要得到如下结果
SQL每日一题(20200506)


该如何写这个SQL?

 

读者可以试着自己思考写下,再往下翻... 如有不同解题方式,大家一起交流。

 

 

 

 

 

 

解答:

sys@WIL>  WITH TTT AS (
  2   SELECT 张三 NAME,100 DAY_AMT, 900 WEEK_AMT, 2700 MON_AMT, 1 GRO FROM dual UNION ALL
  3   SELECT  李四 ,120 , 680 , 2900 , 1  FROM dual UNION ALL
  4   SELECT  王五 ,110 , 850 , 3000 , 2  FROM dual UNION ALL
  5   SELECT  马六 ,120 , 790 , 2800 , 2  FROM dual
  6   )
  7   SELECT DECODE(GROUPING_ID(GRO, NAME),
  8                 1,
  9                  || GRO,
 10                 3,
 11                 总计,
 12                 NAME) "姓名",
 13          SUM(DAY_AMT) "日金额",
 14          SUM(WEEK_AMT) "周金额",
 15          SUM(MON_AMT) "月金额"
 16     FROM TTT
 17    GROUP BY ROLLUP(GRO, NAME);

姓名                                           日金额     周金额     月金额
------------------------------------------ ---------- ---------- ----------
李四                                              120        680       2900
张三                                              100        900       2700
组1                                               220       1580       5600
马六                                              120        790       2800
王五                                              110        850       3000
组2                                               230       1640       5800
总计                                              450       3220      11400

已选择7行。

 

SQL每日一题(20200506)

上一篇:【oracle】 十进制和十六进制相互转换函数


下一篇:Mysql筛选出两张表中不同的数据的SQL