mysql 每个类别的销售均值,单品销售额小于每个类别销售均值的商品数量

SELECT `2级类别名称`,AVG(`单笔销售额`) AS `平均销售额`,count(`数量`)
FROM `表格202306`
GROUP BY `2级类别名称`
HAVING `单笔销售额` < `平均销售额`;

不知道错在了哪里,我是想求每个2级类别名称,和对应2级类别名称的平均销售额,以及低于平均销售额的商品数量。
但是程序报错,“1054-Unknown column '单笔销售额' in 'having clause'

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答由chatgpt基于相关博客总结生成:

    问题出在HAVING子句中使用了别名单笔销售额,而在HAVING子句中无法使用别名进行筛选。解决这个问题有两种方式:

    1. 使用子查询来解决:
    SELECT `2级类别名称`, AVG(`单笔销售额`) AS `平均销售额`, COUNT(`数量`)
    FROM (
        SELECT `2级类别名称`, `单笔销售额`, `数量`
        FROM `表格202306`
    ) AS subquery
    GROUP BY `2级类别名称`
    HAVING `单笔销售额` < AVG(`单笔销售额`);
    
    1. 使用WITH语句来解决:
    WITH subquery AS (
        SELECT `2级类别名称`, `单笔销售额`, `数量`
        FROM `表格202306`
    )
    SELECT `2级类别名称`, AVG(`单笔销售额`) AS `平均销售额`, COUNT(`数量`)
    FROM subquery
    GROUP BY `2级类别名称`
    HAVING `单笔销售额` < AVG(`单笔销售额`);
    

    这样就可以正确地筛选出单品销售额小于每个类别销售均值的商品数量了。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^