SELECT product_id, product_name, type, price FROM ( SELECT product_id, product_name, type, price, RANK() over (partition by type order by price DESC) AS rk FROM product_info ) p WHERE rk <= 2 ORDER BY price DESC, product_name LIMIT 3
- 按名称进行排序,没说升序降序就不用写DESC或ASC
- 无法在 GROUP BY 后再“排序组内记录”,如果要在分组内排序只能用窗口函数ROW_NUMBER()/RANK() OVER(PARTITION BY ... ORDER BY ...)
- 窗口函数中排出的rk只能在子查询以外的where中进行调用,对子查询的结果进行过滤,不能在同一个子查询内使用
- 子查询的表一定要给名字