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?

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

解答:

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) ORDER BY GRO,2;

 结果:

姓名                                           日金额     周金额     月金额
------------------------------------------ ---------- ---------- ----------
张三                                              100        900       2700
李四                                              120        680       2900
组1                                               220       1580       5600
王五                                              110        850       3000
马六                                              120        790       2800
组2                                               230       1640       5800
总计                                              450       3220      11400
原文地址:https://www.cnblogs.com/willspring/p/12870234.html