mysql group by 使用技巧及其with rollup使用

  1. 1、with rollup:  
  2. with rollup关键字会在所有记录的最后加上一条记录,该记录是上面所有记录的总和。  
  3. 2、group_concat():  
  4. group by与group_concat()函数一起使用时,每个分组中指定字段值都显示出来  
  5. select sex,group_concat(name) from employee group by sex;  
  6. mysql> select sex,group_concat(name) from employee group by sex;   
  7. +------+------+-----------+    
  8. | sex |group_concat(name) |    
  9. +------+------+-----------+    
  10. | 女 | 李四               |    
  11. | 男 | 张三,王五,Aric    |      
  12. +------+------+-----------+    
  13. 2 rows in set (0.00 sec)  
  14.   
  15. 例1、普通的 GROUP BY 操作,可以按照部门和职位进行分组,计算每个部门,每个职位的工资平均值:  
  16. mysql> select dep,pos,avg(sal) from employee group by dep,pos;  
  17. +------+------+-----------+  
  18. | dep | pos | avg(sal) |  
  19. +------+------+-----------+  
  20. | 01 | 01 | 1500.0000 |  
  21. | 01 | 02 | 1950.0000 |  
  22. | 02 | 01 | 1500.0000 |  
  23. | 02 | 02 | 2450.0000 |  
  24. | 03 | 01 | 2500.0000 |  
  25. | 03 | 02 | 2550.0000 |  
  26. +------+------+-----------+  
  27. 6 rows in set (0.02 sec)  
  28.   
  29.   
  30. 例2、如果我们希望显示部门的平均值和全部雇员的平均值,普通的 GROUP BY 语句是不能实现的,需要另外执行一个查询操作,或者通过程序来计算。如果使用有 WITH ROLLUP 子句的 GROUP BY 语句,则可以轻松实现这个要求:  
  31. mysql> select dep,pos,avg(sal) from employee group by dep,pos with rollup;  
  32. +------+------+-----------+  
  33. | dep | pos | avg(sal) |  
  34. +------+------+-----------+  
  35. | 01 | 01 | 1500.0000 |  
  36. | 01 | 02 | 1950.0000 |  
  37. | 01 | NULL | 1725.0000 |  
  38. | 02 | 01 | 1500.0000 |  
  39. | 02 | 02 | 2450.0000 |  
  40. | 02 | NULL | 2133.3333 |  
  41. | 03 | 01 | 2500.0000 |  
  42. | 03 | 02 | 2550.0000 |  
  43. | 03 | NULL | 2533.3333 |  
  44. | NULL | NULL | 2090.0000 |  
  45. +------+------+-----------+  
  46. 10 rows in set (0.00 sec)  

你可能感兴趣的:(mysql)