oracle-rollup/cube

今天药忘吃喽~ 2023-10-18 15:58 203阅读 0赞

oracle-rollup/cube

  1. -- 创建一个雇员表
  2. CREATE TABLE employee
  3. (
  4. name NVARCHAR2(10),
  5. gender NCHAR(1),
  6. country NVARCHAR2(10),
  7. department NVARCHAR2(10),
  8. salary NUMBER(10)
  9. );
  10. -- 插入数据
  11. INSERT INTO employee VALUES ('张三','男','中国','市场部',4000);
  12. INSERT INTO employee VALUES ('李四','男','中国','市场部',5000);
  13. INSERT INTO employee VALUES ('王五','女','美国','市场部',3000);
  14. INSERT INTO employee VALUES ('赵红','男','中国','技术部',2000);
  15. INSERT INTO employee VALUES ('李白','女','中国','技术部',5000);
  16. INSERT INTO employee VALUES ('王蓝','男','美国','技术部',4000);
  17. -- 查看数据
  18. SELECT
  19. *
  20. FROM
  21. employee;
  22. -- nvl(col,value) nvl判断如果col列为空,则返回value值,不为空则返回原来的值
  23. -- rollup(col,col)用于计算合计信息
  24. -- cube类似与rollup但是可以统计更多信息
  25. select nvl(country,'总计'),nvl(department,'小计'),round(avg(salary),2)
  26. from employee
  27. group by rollup(country,department);
  28. select nvl(country,'总计'),nvl(department,'小计'),round(avg(salary),2)
  29. from employee
  30. group by cube(country,department);
  31. -- decode 用于类似于if else判断语句
  32. -- grouping 判断该值是否为空,为空则返回1 不为空则返回0
  33. SELECT
  34. DECODE(GROUPING(country), 1, '总计', country) AS country,
  35. DECODE(GROUPING(department), 1, '小计', department) AS department,
  36. round(avg(salary), 2) AVG
  37. FROM
  38. employee
  39. GROUP BY ROLLUP(country, department);
  40. SELECT
  41. DECODE(GROUPING(country), 1, '总计', country) AS country,
  42. DECODE(GROUPING(department), 1, '小计', department) AS department,
  43. round(avg(salary), 2) AVG
  44. FROM
  45. employee
  46. GROUP BY CUBE(country, department);

发表评论

表情:
评论列表 (有 0 条评论,203人围观)

还没有评论,来说两句吧...

相关阅读