1.sum和count的区别,又栽了一遭。sum遇0计0,count遇到任何数计1。
case when 函数没记牢。例:SUM(case when ui.gender = 2 then 1 else 0 END ) female_cnt

2.DATE_FORMAT 就是把日期格式化成你想要的字符串,比如把 2025-12-29 14:30:00 变成 2025年12月、2025-12-29、12/29 等。
DATE_FORMAT(日期字段, '格式模板') 例:DATE_FORMAT(order_time, '%Y-%m') AS month,

2025-01-01 不加引号 = 数学算式,'2025-01-01' 加引号 = 日期

3.LIMIT N → 取前 N 行
LIMIT N OFFSET M → 跳 M 行,取 N 行(分页)
必须配合 ORDER BY,否则结果无序
永远放在 SQL 最后一句

SELECT 
	gi.category_id as id,
	COUNT(gi.goods_id ) as goods_cnt,
	avg(gi.price ) as avg_price,
	MAX(gi.price ) as max_price,
	MIN(gi.price ) as min_price
from category_info ci ,goods_info gi 
WHERE ci.category_id = gi.category_id
group by gi.category_id 
order by gi.category_id 

SELECT
    c.category_name,
    COUNT(g.goods_id) AS goods_cnt,
    ROUND(AVG(g.price),2) AS avg_price,
    MAX(g.price) AS max_price,
    MIN(g.price) AS min_price
FROM category_info c
LEFT JOIN goods_info g ON c.category_id = g.category_id
WHERE c.parent_id = 0  -- 一级品类
GROUP BY c.category_id, c.category_name;

连接方式不同(最关键):第一段是内连接(只查有商品的品类),第二段是左连接(查所有一级品类,含无商品的)
查询范围不同:第一段查所有品类(一级 / 二级 / 三级),第二段只查一级顶级品类 where

5.GROUP BY
✅ 用 原始字段 / 表达式
❌ 用 别名(仅 MySQL 兼容,其他数据库报错)
ORDER BY
✅ 随便用别名(通用标准,所有数据库都支持)
WHERE
❌ 绝对不能用别名(和 GROUP BY 一样,执行顺序在 SELECT 之前

6.结尾用分号,会体现关键词高亮。不管是中文句子还是sql字段,随时结尾随时分号。