MySQL分组数据和排序

总结

  1. 分组可嵌套,可分得更细致
  2. WITH ROLLUP在最后一行返回分组汇总之和
  3. HAVING过滤分组,WHERE过滤行,若同时使用HAVING和WHERE,先用WHERE过滤数据后,HAVING用过滤后的数据再分组
  4. GROUP BY和ORDER BY的区别,尽量都用ORDER BY避免错误
  5. SELECT子句顺序SELECT→FROM→WHEREGROUP BYHAVINGORDER BY→LIMIT

 

1. GROUP BY加上 WITH ROLLUP,可以在最后一行返回分组汇总之和。

SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY vend_id WITH ROLLUP;

+---------+-----------+

| vend_id | num_prods |

+---------+-----------+

|    1001 |         3 |

|    1002 |         2 |

|    1003 |         7 |

|    1005 |         2 |

|    NULL |        14 |

+---------+-----------+

2. HAVING:可规定 包括或排除哪些分组(基于完整的分组而不是个别行进行过滤)

SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY vend_id HAVING COUNT(*)>2;

+---------+-----------+

| vend_id | num_prods |

+---------+-----------+

|    1001 |         3 |

|    1003 |         7 |

+---------+-----------+

3. WHERE和HAVING同时使用:先用WHERE过滤数据后,HAVING用过滤后的数据再分组

SELECT vend_id, COUNT(*) AS num_prods FROM products WHERE prod_price>5 GROUP BY vend_id HAVING COUNT(*)>2;

+---------+-----------+

| vend_id | num_prods |

+---------+-----------+

|    1001 |         3 |

|    1003 |         4 |

+---------+-----------+

4. GROUP BY和ORDER BY的区别:一般用完GROUP BY以后再用ORDER BY,更保险

4.1 不用ORDER BY

SELECT vend_id, COUNT(*) AS num_prods FROM products WHERE prod_price>5 GROUP BY vend_id HAVING COUNT(*)>=2;

+---------+-----------+

| vend_id | num_prods |

+---------+-----------+

|    1001 |         3 |

|    1003 |         4 |

|    1005 |         2 |

+---------+-----------+

4.2 用了ORDER BY

SELECT vend_id, COUNT(*) AS num_prods FROM products WHERE prod_price>5 GROUP BY vend_id HAVING COUNT(*)>=2 ORDER BY num_prods;

+---------+-----------+

| vend_id | num_prods |

+---------+-----------+

|    1005 |         2 |

|    1001 |         3 |

|    1003 |         4 |

+---------+-----------+

5. SELECT子句顺序

SELECTFROMWHEREGROUP BYHAVINGORDER BYLIMIT

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值