一、 mysql 中group by 后是否可以用别名的思考(注意是在mysql中)
SQL语句的执行过程是:
- 先执行 FROM 表名
- 然后如果有 WHERE,就执行 WHERE 进行筛选
- 在执行完 WHERE 条件子句之后,就会执行 GROUP BY 这个分组操作
- 而执行完 GROUP BY 分完组之后才会去执行 SELECT
所以在执行 GROUP BY 的时候 SELECT 的语句还没有被执行过这些别名还没有生效呢,当然我们在 GROUP BY 里面就不能用它了,至于MySQL为什么可以这么用呢,那是因为 MySQL 对这个查询语法进行了一个特殊的强化,所以人家软件里面绐我们开了一个后门我们才可以使用它,算是 MySQL 里的专享特权
但是虽然 mysql分组后虽然能用别名,但是 group by 子句中列出的每个列都必须是检索列或有效的表达式,但不能是聚集函数
例:
写一个 SQL 语句报告每个月的销售情况:
product_name 是小写字母且不包含前后空格
sale_date 格式为 ('YYYY-MM')
total 是产品在本月销售的次数
返回结果以 product_name 升序 排列,如果有排名相同,再以 sale_date 升序 排列。
查询结果格式如下所示:
Sales 表:
+------------+------------------+--------------+
| sale_id | product_name | sale_date |
+------------+------------------+--------------+
| 1 | LCPHONE | 20